В vim я иногда имею возможность заменить первые несколько совпадений в строке, но не каждый, как gхотелось бы. например:
a a a a a
в
b b b a a
Я знаю, что мог бы использовать :s/a/b/[enter]:[up][enter]:[up][enter], но это достаточно утомительно в трех повторениях, у меня есть строки с потенциально более 10 заменами.
Я пытался:
:s/a/b/3g: vim жаловался на висячих персонажей.:s/a/b/3: изменяет первое вхождение в этой и следующих двух строках.3:s/a/b: такой же, как предыдущий.:s/a/b/g3: изменяет все вхождения в этой и следующих двух строках.:3s/a/b: изменяет первое вхождение в строке 3.:/a/,3/a/s/a/b: изменяет первое вхождение в каждой строке между следующейaи третьей строкой, содержащейсяaв файле (при необходимости запрашивая отмену).:/a/,/\([^a]*a\)\{3\}/s/a/b/: изменяет первое вхождение в каждой строке между этим и следующим с 3aс на нем (и это было бы нелегко расширить с помощью многосимвольного поиска).
И различные другие шаблоны адресации, ни один из которых не работал. Должен сказать, я довольно много узнал о :sкоманде, пытающейся найти ответ на эту проблему, но я до сих пор не решил ее.
Кто-нибудь знает, как это сделать?
(бонусные баллы за определенный диапазон, например, со второго по четвертое)
nи .хотя я не думал использовать их здесь. Конечно, улучшение, спасибо.
s/a/=something/должен сделать трюк ( :help sub-replace-=). Я не достаточно свободно говорю на Vim, чтобы сразу писать something.
:[up][enter]можно заменить на &, который все еще не идеален, но по крайней мере менее болезнен.