Sometimes I need to insert some similar lines in a file which differ only in a sequence number. For example,
print "func 1";
print "func 2";
print "func 3";
print "func 4";
print "func 5";
Using vim, I end up copy pasting the first line using [yypppp] and then changing the last four lines. This is really slow if you have more lines to insert.
Is there a faster way to do this in vim?
An example of this is:
Initial state
boot();
format();
parse();
compare();
results();
clean();
Final state
print "func 1";
format();
print "func 2";
parse();
print "func 3";
compare();
print "func 4";
results();
print "func 5";
clean();
Record a macro. Here is the workflow for your particular example:
Copy-paste the first line. Then,
qa : Start recording macro to register a
yy : Yank current line
p : Paste current line in line below
/\d : Search for start of number (you can skip this command, the next command automagically moves the cursor to the number)
C-A : Control-A increments the number
q : Stop recording macro
3@a : Replay macro 3 times
You can replace 3 with any number to keep generating new print
lines with incremented numbers.
For your second example, you can just add
j : Moves one line down
after the yy
command, to get alternating lines of commands and print
's.
You have plugins that do it. For example, visincr. Visually select your column of numbers, and run :I
.
Another way to do it is to record a macro. run qx
to start recording macro to register x, yiw
to yank word under the cursor, j
to go one line down, viwp
to paste it, CTRLA to increment the new number, q
to stop recording, and then @x
to replay contents of register x.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With