Chinaunix首页 | 论坛 | 博客
  • 博客访问: 185569
  • 博文数量: 60
  • 博客积分: 1597
  • 博客等级: 上尉
  • 技术积分: 461
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-20 13:24
文章分类

全部博文(60)

文章存档

2017年(15)

2016年(6)

2015年(37)

2008年(2)

分类: LINUX

2015-09-15 11:04:02

写这篇文章的时候想到了读高中那会儿买的第一个电子产品,某某高复读机,话说是为了学英语,呵呵,你懂的,其实是为了好玩。当时差不多花了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,收工。

阅读(609) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~