Vim – How to Paste a Block of Text at the End of Multiple Lines

pastetext manipulationvim

Say I have a block of text like this:

// Comment1
// Comment2
// Comment3

And I want to append each of these lines to the end of 3 corresponding lines of code:

foo = 1;
bar = 2;
baz = 3;

So that the end result is

foo = 1; // Comment1
bar = 2; // Comment2
baz = 3; // Comment3

Is there an easy way to do this in Vim?

Best Answer

Use visual block mode (Ctrl+v) to select one set of lines, then either y or d them.

Then, if you selected the foo, bar, baz lines use visual block mode again to select the first column of the comment lines and then Shift+p them into place (or if you selected the comment lines, select the last column of the foo bar baz lines and p them into place.

Getting the hang of positioning might take a bit of practice, but when you've got the knack you'll be flying. When you've got a block selected you can also use Shift+A to append e.g. spaces to the block (when appending, the new text will only appear in the top line, but when you hit esc it will magically appear in all the selected lines). Similarly, Shift+i will do the same at the beginning of the selected block on each line.

You'll need to clean up the empty lines afterwards though.

There's also a great vimcasts episode showing these techniques in more detail.

Related Question