Интерактивный поиск/замена регулярного выражения в Vim?

Я знаю регулярное выражение для выполнения глобальной замены,

     %s/old/new/g

Как вы собираетесь выполнять интерактивный поиск-замену в Vim?

Ответ 1

Добавьте флаг c (в командной строке vim):

:%s/old/new/gc

выдаст подсказку "да/нет" при каждом появлении слова "старый".

"old" is highlighted in the text; at the bottom of the window it says "replace with new (y/n/a/q/l/^E/^y)?)"

Встроенная справка Vim предлагает полезную информацию о параметрах, доступных после выбора замены с подтверждением. Использование:

:h :s

Затем перейдите к разделу подтверждения параметров. Снимок экрана ниже:

Text that says "[C] Confirm each substitution. [...] CTRL-Y to scroll the screen down"

Например, чтобы заменить это и все оставшиеся матчи, использовать. a

Ответ 2

Марк Бик указал, используя:

%s/old/new/gc

для глобального поиска заменить на подтверждение для каждой подстановки. Но я также наслаждаюсь интерактивной проверкой того, что старый текст будет соответствовать правильно. Сначала я выполняю поиск с регулярным выражением, затем повторно использую этот шаблон:

/old.pattern.to.match
%s//replacement/gc

s// будет использовать последний шаблон поиска.

Ответ 3

Я думаю, что вы ищете c, например s/abc/123/gc, это заставит VIM подтвердить замены. См.: Help: замените дополнительную информацию.

Ответ 4

Если вы просто хотите подсчитать количество вхождений "abc", вы можете сделать %s/abc//gn. Это ничего не заменяет, а просто сообщает количество вхождений "abc".

Ответ 5

Обычно я использую команду find/substitute/next/repeat: -)

/old<CR>3snew<ESC>n.n.n.n.n.n.n.

Это find "old", substitute 3 characters for "new", find next, repeat substitute и т.д.

Это боль для массивных замещений, но позволяет выборочно игнорировать некоторые вхождения старых (просто нажав n снова, чтобы найти следующий вместо ., чтобы повторить замещение).

Ответ 6

Если ваш текст замены должен измениться для каждого совпадающего события (т.е. не просто выбрать Да/Нет для применения сингулярной замены), вы можете использовать плагин Vim, который я сделал под названием interactive-replace.