:help substitute Substitute allows you to search and replace using regular expressions. The command
s/find/replace/g will replace “find” with “replace”, the
s is for substitute, the
g (global) option replaces every occurrence in a line, without the
g it will only replace the first occurrence in a line.
Prefix the command with the range to work on, if no range is specified it will only search and replace on the current line.
The space between range and
s is not necessary, but I find it more legible.
% to search and replace across the whole document:
Use a line number range to replace all “find” with “replace” between lines 137 and 140:
You can define a range using VISUAL mode. First, highlight the area you want and then type
: to go into command-line mode. Vim will automatically insert
'<,'> this is it’s magical incantation to operate over the selection, leave it there. Next, type your substitute command
Besides search and replace, you can use
g/find/d to delete all lines that match find, or
v/find/d to delete all lines that do not match find.
I found the easiest way to search and replace across multiple files is using the
:bufdo commands. To use, you first setup the files you want to operate against. For
:argdo it uses the files on the argument list, for
:bufdo it uses the current buffers list.
To setup the
:args list, you can glob the files you want. For example, all markdown files
:args **/*.md or all files
:args **/*. You can see the files are the list, run
:args with no parameters.
To run the substitute command across all the files, use:
:argdo %s/find/replace/g | update
This will run the given command, our substitute, across each file in the args list. The
| update will save the file if any changes were made.
The same can be done with
:bufdo for files in open buffers.