7

有时我需要在文件中插入一些类似的行,这些行仅在序列号上有所不同。例如,

print "func 1";
print "func 2";
print "func 3";
print "func 4";
print "func 5";

使用vim,我最终使用 [yypppp] 复制粘贴第一行,然后更改最后四行。如果要插入更多行,这真的很慢。

在vim中有没有更快的方法来做到这一点?


这方面的一个例子是:

初始状态

boot();
format();
parse();
compare();
results();
clean();

最终状态

print "func 1";
format();
print "func 2";
parse();
print "func 3";
compare();
print "func 4";
results();
print "func 5";
clean();
4

3 回答 3

12

录制宏。这是您的特定示例的工作流程:

复制粘贴第一行。然后,

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

您可以用任何数字替换 3 以继续生成print具有递增数字的新行。

对于您的第二个示例,您可以添加

j        : Moves one line down

yy命令之后,获取命令和print's 的交替行。

于 2010-10-21T07:04:23.790 回答
1

你有插件可以做到这一点。例如,visincr。直观地选择您的数字列,然后运行:I​​.

另一种方法是录制宏。运行qx开始录制宏到寄存器xyiw抽出光标下的单词,j向下移动一行,viwp粘贴它,CTRLA增加新数字,q停止录制,然后@x重播寄存器x的内容。

于 2010-10-21T06:50:43.740 回答
0

对于这种特殊情况,您可以使用宏。在这篇文章中有一个很好的关于如何做序列号的文章

您需要更改帖子中的示例以先写出整行,然后记录复制该行并更新计数器的宏。

于 2010-10-21T06:55:24.080 回答