Substitute characters and lines easily

From Vim Tips Wiki

Jump to: navigation, search
Tip 81 Printable Monobook Previous Next

created 2001 · complexity basic · version 6.0

The s (substitute) command can be used to replace specified characters, and the S command can be used to replace specified lines.

For example, the following has the same leading string on several lines:

foo_bar_baz1 = a1
foo_bar_baz2 = a2
foo_bar_baz3 = a3
foo_bar_baz4 = a4
foo_bar_baz5 = a5
foo_bar_baz6 = a6

Put the cursor on the f at the start of the first line and type the following: 7s then fixed then press Esc. That changes foo_bar_baz1 to fixed_baz1. Move the cursor to the start of the next line and press . to repeat the command.

A single character can be replaced with the r command. For example, with the cursor on "f", type rt to replace the "f" with "t". That only works with characters that can be entered with a single key press, and s can be used to for a replacement with a digraph. For example, put the cursor on the "x" in text "12x106" then press s followed by Ctrl-K *X to change the text to "12×106".

If you need to substitute three lines of text, type 3S. Vim deletes the three lines and enters insert mode, waiting for the subsitution text.

[edit] Comments

Of course, if you're lazy like me and you don't want to count that there are 7 characters that you want to replace, you could use the c command and use a motion to specify how much to kill. For example, in the previous example, I'd type c2t_ to kill foo_bar and to be left in insert mode.

You could select the "foo_bar" characters with Ctrl+V (Visual Block – Ctrl+Q on Windows), press "c" to change the block, make your change to the first line, and press Esc. All the lines you selected will be changed the same way.

Personal tools