Interactive search/replace regex in Vim?

Viewed 81724

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?

7 Answers

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'.

"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'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:

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

For instance, to substitute this and all remaining matches, use a.

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.

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).

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'.

Related