Вим поиск заменить на некоторые конкретные строки - PullRequest
0 голосов
/ 15 октября 2018

Команда Vim substitute :%s/old/new/g заменит все вхождения old на new.Но я хочу сделать эту замену только в строках, которые не начинаются с #.Я имею в виду, что в моем файле есть несколько строк, начинающихся с # (так называемые закомментированные строки), которые я хочу исключить при поиске и замене.Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Ответ от Томаса в порядке.Другим подходом может быть отрицательный взгляд назад:

:%s/\(#.*\)\@<!old/new/g

Этот метод соответствует каждому old, которому не предшествует #, в то время как метод Thomas соответствует каждой строке, не начинающейся с # и затем соответствует каждому old в этой строке.

Решение Кента немного более элегантно.Он использует :v, что совпадает с :g!.Он соответствует каждой строке, начинающейся с #, а затем запускает команду для каждой другой строки.Преимущество в том, что регулярное выражение становится легче.В вашем сценарии использования регулярное выражение не соответствует, это довольно легко, но часто проще создать регулярное выражение, соответствующее критерию, чем тот, который не соответствует.поэтому здесь помогает команда :v.

В вашем случае команда global (оба других ответа используют global) кажется более безопасной, поскольку она проверяет только # в началелинии.Но в зависимости от варианта использования все три метода имеют свои преимущества

0 голосов
/ 15 октября 2018
:v/^#/s/old/new

должен сделать эту работу.проверьте :h :v для деталей.

0 голосов
/ 15 октября 2018

Вы должны смешать его с помощью команды g (см. help :global):

:%g/^[^#]/s/old/new/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...