Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 2.63 KB

24.md

File metadata and controls

34 lines (25 loc) · 2.63 KB

每日一Vim(24)宏---Record、Play

写这篇文章的时候想到了读高中那会儿买的第一个电子产品,某某高复读机,话说是为了学英语,呵呵,你懂的,其实是为了好玩。当时差不多花了300担,父母在子女的教育方面可是毫不手软,想想如果那时开始接触计算机互联网相关的东西了,买的就是一台电脑,我离那“一万小时定律”就要早几年完成了...言归正传。
tu

今天要说的其实就和这个复读机相关,复读机在按下复读的按钮后,就开机录制需要复读的内容,再按一下录制完成,接下来就可以播放了。Vim中也有与之惊人相似的操作,如果想重复某个操作,就可以用来完成,还记得以前讲过的一个命令吗:.就是这个可以重复执行最后一次操作,但是这个.的功能比较弱,没法组合使用,如下代码,想在每行末加上分号";":

int a = 1
int b = 2
int c = a+b
print a
print b
print c

如果是用.来实现的话,首先在第一行执行$a;,然后重复5次执行j$.,这样算下来你要敲击的键总数在15次之多,但是我们用Record/Play的话,即使是100行代码,按键也不会超过10次。命令闪亮登场:q,就是这个q,它的威力很猛。接下来就详细介绍如何操作q来实现上述需求。

  1. normal 模式下输入q启动recoding,q后面跟任意a-z的小写字母比如m,这个字母就是宏的名字,接下来你要执行的操作就会记录在这个宏中。
  2. 执行我们的任务:“行末加分号”,命令是:$a;<Esc>j$,这条命令意思就是:移动行尾插入分号,退到normal模式,光标移动到下一行的末尾。
  3. 再次输入q,表示录制结束
  4. 录制结束后我们就可以play了,输入@m就会执行宏中的操作,m是第一步中使用的宏的名称,5@m表示重复执行5次。这样,所有行都给加上分号了,真是好使。

再举一例:实现如下效果:从1到100,每行+1。

1
2
3
...
100

命令:首先在第一行插入1,然后光标定位了“1”处,进入normal模式,开始录制:qmyyp<Ctrl>aq,(解释:yyp:拷贝一行再粘贴在新的一行,<Ctrl>a:数字+1)后然执行98@m,收工。

转载请注明出处,谢谢合作!作者---zhijun

答应推荐一个微信号的:Mac技巧,主人是70后程序员,主要讲人文科技+mac技巧相关内容。