`
lantian_123
  • 浏览: 1373222 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

 
阅读更多

每日一Vim(23)宏---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技巧相关内容。

2
1
分享到:
评论
9 楼 qdujunjie 2016-06-16  
学会了recording,感谢~~
8 楼 kidneyball 2013-04-10  
再补一个: 在normal下@@是重复执行上一次执行的宏
7 楼 kidneyball 2013-04-10  
帮楼主补充几点:

1. 楼主的宏中第2步用 A;<Esc>j 就行了。定义宏的一个惯用套路是: 行内跳转定位 + 真正操作 + 移动到下一目标行。 把行内跳转定位放在开头可以让你replay时不用事先把光标放在特定的列位置。而因此在宏末尾再做一次行内定位就多余了。

2. 宏与yank是共享寄存器的,最好有某种策略保证不会冲突。我个人的习惯是qwer四个寄存器用来录制临时用完即弃的宏(靠近q和@比较好按)。uiop四个键预留给yank (靠近"和y,p键。也就是除了常用的“和0号寄存器外,再预留四个寄存器来做复制粘贴,通常够用了),其他字母键用来记录固定宏(也就是关了vim下次打开还会接着用的常用宏)

3. 可以用 :put 寄存器名称 命令把宏输出到编辑区进行编辑,改好后再yank回去。改动时在插入模式下可以用ctrl+v后跟组合键来输入组合键(例如你要在宏中回车,在修改宏时可以按 ctrl+v ctrl+m ),当然直接用尖括号括住的特殊键名称亦可。 (例如<CR>表示回车)
具体可以参考 :h keycodes 。 利用这一点可以把一些常用的但又比较复杂的宏的导出到文件中,使用时再yank进去,突破26个字母寄存器的限制。
6 楼 kidneyball 2013-04-10  
isensen 写道
gvim下ctrl+a是全选 怎么破
微信摇过两天妹子.....然后...就没然后了


新安装的gvim for windows打开后,:e $MYVIMRC 打开配置文件,应该能看到已经有一些预设内容了,开头4行是这样的:
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin


把第三和第四行注释掉(或者干脆dd掉)
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
"source $VIMRUNTIME/mswin.vim
"behave mswin

即可。这样会把针对windows习惯的预设mapping都去掉。你觉得有需要的自己再单独map回去就是了。
5 楼 lantian_123 2013-04-10  
isensen 写道
lantian_123 写道
isensen 写道
gvim下ctrl+a是全选 怎么破
微信摇过两天妹子.....然后...就没然后了

应该是你做了映射,可以在vimrc文件查看一下,把映射关系去掉就行了,看看以前讲的maphttp://liuzhijun.iteye.com/blog/1833814这篇文章

这个我记得.每一篇我都有看,GVIM为了保留用户习惯,默认映射了ctrl+a是全选,这个我不想去掉,还有别的办法吗?

:nnoremap <A-a> <C-a>
:nnoremap <A-x> <C-x>

用Alt+A替换Ctrl+A,同理Alt+x替换Ctrl+x
4 楼 isensen 2013-04-10  
lantian_123 写道
isensen 写道
gvim下ctrl+a是全选 怎么破
微信摇过两天妹子.....然后...就没然后了

应该是你做了映射,可以在vimrc文件查看一下,把映射关系去掉就行了,看看以前讲的maphttp://liuzhijun.iteye.com/blog/1833814这篇文章

这个我记得.每一篇我都有看,GVIM为了保留用户习惯,默认映射了ctrl+a是全选,这个我不想去掉,还有别的办法吗?
3 楼 leftcopychenhx 2013-04-10  
isensen 写道
gvim下ctrl+a是全选 怎么破
微信摇过两天妹子.....然后...就没然后了

http://stackoverflow.com/questions/289681/why-does-c-a-ctrla-not-work-under-gvim-on-windows

另外$a换成A可以少一次按键
2 楼 lantian_123 2013-04-10  
isensen 写道
gvim下ctrl+a是全选 怎么破
微信摇过两天妹子.....然后...就没然后了

应该是你做了映射,可以在vimrc文件查看一下,把映射关系去掉就行了,看看以前讲的maphttp://liuzhijun.iteye.com/blog/1833814这篇文章
1 楼 isensen 2013-04-10  
gvim下ctrl+a是全选 怎么破
微信摇过两天妹子.....然后...就没然后了

相关推荐

    Mac开发利器之程序员编辑器MacVim学习总结--木一璕的文章--CFANZ社区--IT技术分享网站1

    4. **宏录制与播放**:`:record`命令可以录制一系列操作,`:play`则可以重复这些操作,节省重复劳动的时间。 5. **强大的搜索与替换**:`:grep`命令可以在项目中全局搜索,`:%s/pattern/replacement/g`可以在当前...

    vimusermanual_vim_

    - 录制与回放宏:`:record a` 开始录制宏到寄存器a,完成后再用`:play a` 回放。 - 分屏编辑:`:sp filename` 在当前窗口下方打开新文件,`:vs filename` 在右侧打开新文件。 - 插件管理:Vim支持许多插件,如...

    Vim用户手册中文版72.pdf

    通过`:record`命令开始录制,然后执行一系列操作,最后用`:play`命令播放宏,可以大大节省时间。手册会详细讲解这个功能。 除此之外,手册还会涵盖撤销和重做、标签跳转、多窗口编辑、Vim的可视化模式以及Ex命令行...

    vi中文手册vim_user_manual

    对于进阶用户,手册会涵盖VIM的宏定义与使用,通过`:record`命令可以录制一系列操作,然后通过`:play`或`@`执行。此外,VIM还支持正则表达式的搜索和替换,如`/pattern`查找模式,`:%s/pattern/replacement/g`全局...

    LINUX Learn-vi

    - **宏录制与播放**:`:record a`开始录制宏到寄存器'a',完成后再按'q'停止。`:play a`播放宏。 - **撤销与重做**:在命令模式下,'u'撤销,'U'撤销整行,'.'重复上次操作。 **7. 学习资源** 学习Vi编辑器,可以...

    gvim编辑器

    - **宏录制与回放**:`:record a`开始录制宏,`:play a`回放宏,方便重复执行一系列操作。 - **视觉选择**:使用`v`进入可视模式,选择文本块后可进行复制、剪切等操作。 - **语法高亮**:gvim支持多种编程...

Global site tag (gtag.js) - Google Analytics