分类: LINUX
2015-09-15 11:04:02
写这篇文章的时候想到了读高中那会儿买的第一个电子产品,某某高复读机,话说是为了学英语,呵呵,你懂的,其实是为了好玩。当时差不多花了300担,父母在子女的教育方面可是毫不手软,想想如果那时开始接触计算机互联网相关的东西了,买的就是一台电脑,我离那“一万小时定律”就要早几年完成了...言归正传。
今天要说的其实就和这个复读机相关,复读机在按下复读的按钮后,就开机录制需要复读的内容,再按一下录制完成,接下来就可以播放了。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
来实现上述需求。
q
启动recoding,q后面跟任意a-z的小写字母比如m
,这个字母就是宏的名字,接下来你要执行的操作就会记录在这个宏中。
$a;<Esc>j$
,这条命令意思就是:移动行尾插入分号,退到normal模式,光标移动到下一行的末尾。
q
,表示录制结束
@m
就会执行宏中的操作,m
是第一步中使用的宏的名称,5@m
表示重复执行5次。这样,所有行都给加上分号了,真是好使。
再举一例:实现如下效果:从1到100,每行+1。
1
2
3
...
100
命令:首先在第一行插入1,然后光标定位了“1”处,进入normal模式,开始录制:qmyyp<Ctrl>aq
,(解释:yyp
:拷贝一行再粘贴在新的一行,<Ctrl>a
:数字+1)后然执行98@m
,收工。