神奇的ex模式

用Vi一直都是个学习的过程,以前看别人写的关于global的介绍,还记得作者称赞global是Vi中最有用的命令之一,当时也就跟着照猫画虎现学现用,直到这几天看了些关于ex的博文,这才知道global所以有用,全依赖着ex命令,而整个Vi实际上是基于ex这个底层的行编辑器实现,而global完全可以被理解为在整篇文本中执行命令的意思,自身倒是没什么神奇的地方。

在学会了ex后,会发现对寄存器的操作其实完全可以用命令来完成,比如粘贴系统剪贴板可以用yank +put +,我个人觉得这比Ctrl +要来得快,而我很久以后纠结的自动生成参考文献的,也可以ex配合查找替换快速完成,方法如下:

注,文中参考文献的写法为\cite{blablabla}

定义一个变量用来记录文献编号

 :let w:i=0 :function Add(x) x=x+1 return x endfunction 

替换

 :%s/\(\\cite\{.\+\)\}/\="\r".Add(w:i)."\1"."\r"/g 

这样就把文中所有的参考文献都分离为单独的一行,并且都加上编号了。

清空寄存器,这里我用到了寄存器a

:let @a=""

生成参考文献列表

 :%global/^\[\d\+\]/yank A | s/\(\[\d\+\]\).*/\1/g 

这个时候在寄存器a中已经有了参考文献列表了,先恢复原文排版

 :%s/\n\(\[\d\+\]\)\n/\1 

找个空白的地方把寄存器a中的内容put出来

:put a
Advertisements
此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s