Да! Используйте cфлаг для :substitute. От :help substitute:
[c] Confirm each substitution. Vim highlights the matching string (with
hl-IncSearch). You can type: :s_c
'y' to substitute this match
'l' to substitute this match and then quit ("last")
'n' to skip this match
<Esc> to quit substituting
'a' to substitute this and all remaining matches {not in Vi}
'q' to quit substituting {not in Vi}
CTRL-E to scroll the screen up {not in Vi, not available when
compiled without the +insert_expand feature}
CTRL-Y to scroll the screen down {not in Vi, not available when
compiled without the +insert_expand feature}
Пример использования прост как пирог:
%s/old/new/c
Это очень полезно, но не знал об этом до 2 недель назад :-) И даже доступно в ol 'vi :-)
Бонусный совет: вы также можете использовать :set nowrapscan; это препятствует тому, чтобы Vim обернулся к вершине, когда это достигает дна. Я нашел это особенно полезным при использовании cфлага.
Параметр &incsearch( set incsearch) в Vim действительно полезен. Вы можете использовать его вместе с полезным и малоизвестным приемом.
Хитрость заключается в том, чтобы опробовать ваше сложное регулярное выражение, просто используя команду /or ?. Vim будет использовать &incsearchнастройки для интерактивного отображения матчей. Если вы довольны регулярным выражением, вы можете использовать :%s//replacementvim для предыдущего поиска.
Обратите внимание, что часть //пуста (вот где вы помещаете текст для поиска). Если вы оставите это поле пустым, вы скажете Vim использовать предыдущее регулярное выражение поиска. При этом вы можете набрать сложное регулярное выражение с /и иметь все преимущества set incsearch, а затем использовать %s//replacementкоманду для фактического выполнения поиска и замены.
Если вы хотите что-то похожее на incsearch для :sкоманд, посмотрите vim-over , но я просто предпочитаю использовать нативный способ Vim.
Раньше я использовал вариант этого: просто используйте, :%s/pattern/replace/а затем нажмите uдля отмены, вы можете увидеть части, которые Vim изменил, если вы hlsearchвключили. И вы можете заменить этот текст снова ^R.
Мартин Турной
7
Моя любимая интерактивная замена - поиск с использованием /и просмотр с использованием соответствий n.
Затем выберите матч , используя gnи затем , sчтобы заменить текст с тем, что мне нравится.
Это очень хороший трюк, потому что он: (1) интерактивный, (2) вы можете перейти к предыдущему матчу, если случайно пропустили его (то, что вы не можете сделать, используя :s/old/new/gc).
Айрат
3
В Neovim также есть 'inccommand'опция, которая позволяет вам предварительно просмотреть результат команды во :sвремя ее ввода.
:%s/pattern/replace/
а затем нажмитеu
для отмены, вы можете увидеть части, которые Vim изменил, если выhlsearch
включили. И вы можете заменить этот текст снова^R
.Моя любимая интерактивная замена - поиск с использованием /и просмотр с использованием соответствий n.
Затем выберите матч , используя gnи затем , sчтобы заменить текст с тем, что мне нравится.
И повторите , перейдя к следующему матчу и нажав.
источник
:s/old/new/gc
).В Neovim также есть
'inccommand'
опция, которая позволяет вам предварительно просмотреть результат команды во:s
время ее ввода.источник
Для удобства всех,
incsearch
был обновлен в vim8, чтобы также показывать предварительный просмотр при вводе шаблонаисточник