Замените энным возникновением слова в энергии

Я видел другие вопросы иметь дело с нахождением энного возникновения слова/шаблона, но я не мог найти, как Вы на самом деле замените энным возникновением шаблона в энергии. Существует очевидный способ трудного кодирования всех случаев как

:s/.*\(word\).*\(word\).*\(word\).*/.*\1.*\2.*newWord.*/g 

Существует ли лучший способ сделать это?

16
задан Gaurav Dadhania 19 June 2010 в 00:39
поделиться

3 ответа

Вы можете сделать это немного проще, используя несколько поисковых запросов. Пустой шаблон в команде : s / pattern / repl / означает замену самого последнего результата поиска.

:/word//word//word/ s//newWord/
or
:/word//word/ s/word/newWord/

Вы можете повторить это несколько раз, выполнив @: или даже 10 @: , чтобы повторить команду еще 10 раз.

В качестве альтернативы, если бы я делал это в интерактивном режиме, я бы сделал что-то вроде:

3/word
:s//newWord/r

Это обнаружит третье вхождение слова , начиная с курсора, а затем выполнит замену.

6
ответ дан 30 November 2019 в 21:53
поделиться

Для информации,

s/\%(\(pattern\).\{-}\)\{41}\zs\1/2/

также работает для замены 42-го вхождения. Однако я предпочитаю решение, данное Джоном Кугельманом , которое более простое - даже если оно не ограничивается текущей строкой.

10
ответ дан 30 November 2019 в 21:53
поделиться

Ну, если вы сделаете /gc, то сможете посчитать, сколько раз он попросит вас подтвердить, и продолжить замену, когда дойдете до n-го :D

0
ответ дан 30 November 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: