Vim

你可以在 VIM 中录制一系列按键,并把他们存储到 寄存器 中。对于一些需要临时使用多次的一系列操作,把它们作为宏保存起来会显著地提升效率。对于一些复杂的操作,建议使用 VIM 脚本来实现。

  • 首先,按下 q,然后按下你想要保存的寄存器,任何小写字母都可以。比如我们来把它保存到 q 这个寄存器中。按下 qq,你会发现命令行里已经显示了 "recording @q"。
  • 如果你已经录制完成,那么只需要再按一次 q 就可以结束录制。
  • 如果你想调用刚才录制的宏,只需要 [count]@q
  • 如果你想调用上一次使用的宏,只需要 [count]@@

实例 1 :一个插入字符串 "abc" 后换行的宏,重复调用十次:

qq
iabc<cr><esc>
q
10@q

(对于上面这个功能,你同样可以通过如下的按键: oabc 然后 ESC 然后 10. 来实现)。

实例 2 :一个在每行前都加上行号的宏。从第一行开始,行号为 1,后面依次递增。我们可以通过 Ctrl + a 来实现递增的行号,在定义宏的时候,它会显示成 ^A

qq
0yf jP0^A
q
1000 @q

这里能实现功能,是因为我们假定了文件最多只有 1000 行。但更好的方式是使用「递归」宏,它会一直执行,知道不能执行为止:

qq
0yf jP0^A@q
q
@q

(对于上面这个插入行号的功能,如果你不愿意使用宏,同样可以通过这段按键操作来实现::%s/^/\=line('.') . '. ')。

这里向大家展示了如何不用宏来达到相应的效果,但要注意,这些不用宏的实现方式只适用于这些简单的示例。对于一些比较复杂的自动化操作,你确实应该考虑使用宏。

请参阅以下文档获取更多帮助:

:h recording
:h 'lazyredraw'