В 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]
можно заменить на &
, который все еще не идеален, но по крайней мере менее болезнен.