Как сделать замену только на выделенный текст в vim? - PullRequest
3 голосов
/ 25 февраля 2012

Перед выполнением подстановки я обычно набираю / foo , чтобы сначала найти шаблон.
Vim автоматически выделяет все строки, соответствующие шаблону.
Затем я выясняю, как написать команду подстановки :%s/foo/bar/g.
Когда шаблон сложный, гораздо сложнее написать команду подстановки, чем команду поиска.
Если я могу выполнить подстановку только для выделенных строк.Это становится легко.

Например:

Вопрос: Перевести часть строки
Я могу выяснить схему поиска: /\[\[\(http\)\@!.\{-}\]\]
Но я не могу понять команду подстановки легко.

Ответы [ 3 ]

6 голосов
/ 25 февраля 2012

Вы можете заменить ранее найденный шаблон, если вы используете пустую строку в качестве шаблона поиска в команде замены:

После /foo введите :%s//bar/g в обычном режиме, чтобы заменить "foo" на "bar".

0 голосов
/ 25 февраля 2012

Я только что понял:

:%s@@\=substitute(submatch(0), '_', '/', '')@g

Но есть ли лучшие способы?

0 голосов
/ 25 февраля 2012

Вы можете использовать флаг 'c', чтобы Vim подтвердил перед заменой. Он подсвечивает и останавливает запрос перед каждым совпадением с данным шаблоном.

:%s/foo/bar/gc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...