如何在vim中插入类似的行时最小化击键?

时间:2010-10-21 06:48:22

标签: vim keyboard-shortcuts code-snippets vim-macros

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

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();

3 个答案:

答案 0 :(得分: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的命令。

答案 1 :(得分:1)

你有插件可以做到这一点。例如,visincr。以可视方式选择您的数字列,然后运行:I

另一种方法是录制宏。运行qx开始录制宏以注册 x yiw在光标下面移动字词,j向下移动一行,viwp到粘贴它, CTRL A 增加新数字,q停止录制,然后@x重播注册 x的内容

答案 2 :(得分:0)

对于这种特殊情况,您可以使用宏。有关如何在this post中执行序列号的详细说明。

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