Reputation: 29421
I know the regex for doing a global replace,
%s/old/new/g
How do you go about doing an interactive search-replace in Vim?
Upvotes: 307
Views: 97225
Reputation: 28222
Neovim now has a feature inccommand
which allows you to preview the substitution:
inccommand
has two options:
set inccommand=split
previews substitutions in a split paneset inccommand=nosplit
previews substitution in the active bufferImage taken from: https://medium.com/@eric.burel/stop-using-open-source-5cb19baca44d Documentation of the feature: https://neovim.io/doc/user/options.html#'inccommand'
Upvotes: 2
Reputation: 150909
Add the flag c (in the vim command prompt):
:%s/old/new/gc
will give you a yes/no prompt at each occurrence of 'old'.
Vim's built-in help offers useful info on the options available once substitution with confirmation has been selected. Use:
:h :s
Then scroll to section on confirm options. Screenshot below:
For instance, to substitute this and all remaining matches, use a
.
Upvotes: 565
Reputation: 469
If your replacement text needs to change for each matched occurrence (i.e. not simply choosing Yes/No to apply a singular replacement) you can use a Vim plugin I made called interactive-replace.
Upvotes: 3
Reputation: 23894
If you just want to count the number of occurrences of 'abc' then you can do %s/abc//gn
. This doesn't replace anything but just reports the number of occurrences of 'abc'.
Upvotes: 9
Reputation: 18650
Mark Biek pointed out using:
%s/old/new/gc
for a global search replace with confirmation for each substitution. But, I also enjoy interactively verifying that the old text will match correctly. I first do a search with a regex, then I reuse that pattern:
/old.pattern.to.match
%s//replacement/gc
The s//
will use the last search pattern.
Upvotes: 90
Reputation: 40346
I think you're looking for c
, eg s/abc/123/gc
, this will cause VIM to confirm the replacements. See :help :substitute for more information.
Upvotes: 21
Reputation: 882606
I usually use the find/substitute/next/repeat command :-)
/old<CR>3snew<ESC>n.n.n.n.n.n.n.
That's find "old"
, substitute 3 characters for "new"
, find next
, repeat substitute
, and so on.
It's a pain for massive substitutions but it lets you selectively ignore some occurrences of old (by just pressing n
again to find the next one instead of .
to repeat a substitution).
Upvotes: 9