Anyone familiar with Sublime Text's multiple cursor feature will recognize the pattern of doing the following: press a hotkey multiple times to select multiple instances of the word under the cursor and automatically create a new cursor for each of those instances; then edit each instance simultaneously, e.g. by replacing the current word with another word or whatever you want.
The multiple cursors feature is available for vim via plugin. Before using that plugin, I want (as a new vim user), to check whether there is a more natively vim-like way to achieve the same task.
For instance, I know I could use the :s
command to do a search and replace (per instructions here), but that requires me to (1) type in the word I want to replace (or use the <C-r><C-a>
shortcut to do so), as opposed to simply using the current word and (2) define a range. Perhaps this is the native vim way to do it, perhaps (likely!) there's another way I don't know.
So what is the native vim way?
I use the
*
,gn
, and the.
to make changes.*
(go back withN
)gn
motion. e.g.cgnfoo<esc>
.
commandNote: If you have many changes then using a substitution command would probably be better.
There is a nice Vimcasts episode about the
gn
motion: Operating on search matches using gn.For more help see:
You can record macros in Vim by pressing
q<letter>
. Macros can include then
command to search for the next instance of a word. You can also go into insert mode while recording (e.g. using thec
command with a motion such asiw
to replace the current word). Pressq
to stop recording, and then press@<letter>
to replay the macro once. After that, you can use@@
to repeat the macro as many times as you like.While waiting for other answers, I'm going to post what I'm experimenting with while waiting for vim experts to answer:
to substitute (the
s
) from the current line (the.
) to the last line ($
) (with the comma denoting the line range), using the<C-r><C-a>
combo to copy the current word into the command, then usinggc
to change with confirmation, so I can hit yes/no for each instance then quit when I've done enough.