插件
插件机制是软件可扩展性的一个体现,很多知名软件都提供扩展机制,Firefox,Chrome,
Eclipse等等。在开源的世界里,一个好软件没扩展你都不好意思和人家打招呼。
这里首先简要介绍一下Vim的插件安装, 然后再介绍对代码编写比较有帮助较有用的几个
老字号的插件(这样异议就没那么多了)。其实插件包含的内容很多,例如插件的编写等,
但是作为一个入门级指南文档,点到为止即可,毕竟不是每个人都是“不折腾会死星人”。
Taglist
这里先以taglist插件为例来介绍如何安装插件。
首先到Vim的官网上(www.vim.org)首页的左侧搜索框中输入"taglist"搜索该插件。Vim官
网上将插件统称为Script,即脚本。其实也确实如此,因为Vim的插件都是使用Vim自身的
脚本语言所编写的,都为脚本程序。下载网址如下:
http://www.vim.org/scripts/script.php?script_id=273
在下载页上可以发现最新的版本号是45,并且是2007年更新的,这表示两种可能:一,该
插件是老字号,已经没有bug要修复,因此版本号稳定;二,维护人不维护了…(喂,越
来越贫了!)。下载后解压该zip包,发现两个目录,分别为doc和plugin。 将这两个目录
拷贝到用户家目录下的.vim目录内,如果已有这两个目录的话,合并即可。
其中,doc目录内存放的是taglist的帮助文档, 文档格式和Vim的帮助文档格式一致,都
可以进行跳转。安装之后,你可以在Vim中输入:
:help Tlist
来查看taglist的该帮助。
而plugin目录内存放的则是插件的脚本文件了,将其拷贝到对应目录后就完成了插件的安
装。就这么简单。
安装之后,需要重新打开Vim。在里面打开一个C源文件,然后键入:
:Tlist
默认会在右侧新开一个窗口,里面列出了源文件中所定义的宏、变量和函数。切换到该窗
口上,移动光标到想要查看的函数名上,然后键入回车,便会在跳转到源文件中该函数定
义的地方了。
对于笔者来说,该插件使用的较少, 因为Vim本身的搜索功能和gD跳转功能已经够用了。
taglist最大的优点是:它的跳转是跨文件跳转,这是gD所不具有的。例如,你Vim中打开
了main.c和login.c在编辑。打开taglist,它的窗口会显示这两个源文件中的所有定义。
假设此时你在main.c标签页下编辑,然后在taglist中移动到了login.c中的一个函数定义
上,并键入回车,则当前标签页会关闭main.c而打开login.c并跳转到该函数定义处。 这
便是跨文件跳转。如果想要跳转回去,键入Ctrl+o即可。
要关闭taglist窗口,再次执行:Tlist即可。taglist的具体用法请查看它的帮助。
ctags
另外一个支持跨文件跳转的插件是ctags。其实这不是一个插件,而是Linux下的一个应用
程序。在安装好ctags之后,在Vim中执行:
:!ctags *.h *.c
便会在将当前目录下的所有h和c文件里的各种声明和定义进行检索,并在该目录下生成一
个索引文件tags。
定义跳转
<--------------------------->
Ctrl+], Ctrl+o
Vim默认使用该文件作为索引。假如还是上面那两个文件(login, main: 出场费T_T ),你
在编写main.c时,里面调用了login.c中的login()函数,如果你想查看该函数定义,不需
要繁琐地去打开taglist窗口,然后移动到该函数名处按回车了。 只需将光标移动文件中
该函数名上,然后键入Ctrl+],便会和使用taglist的效果一样。 同样,如果查看过后需
要返回,则键入Ctrl+o即可。
有了ctags之后,基本上就没taglist什么事了。 不过taglist也是好同志,还是有优点的
,那就是比较直观。
关于ctags在Vim中的应用,可以输入:
:help ctags
来查看。
不过ctags只能查看某个函数或变量的定义所在, 却不能查看该函数或变量在什么地方被
调用,而这个可是在Source Insight和Kscope中有的功能哦。
Source Insight中的实现笔者不清楚,因为是Windows下的。不过对于Linux上的Kscope来
说,或者对于Linux上的其他支持该功能的IDE来说,基本上都是依赖cscope来完成该功能
的。从Kscope的名字上就看的出来了吧。
其他程序能用cscope,当然Vim也能用了。 cscope就是这么强大,有多强大呢,笔者都不
愿写它在Vim中的的用法了。老实说,cscope在Vim中的使用,快捷键非常烦复;而且对于
笔者所编写的项目程序的规模来说,也就是不过10来个文件,实在是不需要用这把牛刀,
您应该用在内核这种级别的项目代码上啊。而笔者平时使用一下搜索即可知道函数被在哪
被调用了。 实在不行,不是还有grep嘛,同样能给出调用信息,只不过不能用Vim在各个
文件里跳来跳去而已。
quickfix
最后要介绍的一个插件是quickfix。 不过到7.3版时,该插件因为太好用而已经被吸收到
了Vim内部,用C来实现,不需要再额外下载安装插件。
quickfix也程序员的好工具之一。 在终端下编写代码时,你是不是常常需要在Vim和终端
之间切换呢?总需要Ctrl+z先后台Vim,然后执行make。 如果哦出错了,先看第一个编译
错误提示的行号,然后fg调出Vim,执行跳转命令后修复该错误。 然后再Ctrl+z,继续这
些操作直到编译没有错误为止。
这样很烦的吧。不过有了quickfix之后,你就可以和这种造成你左手小拇指抽筋的生活说
再见了。
当要编译时,你只需直接在Vim中执行:
:make
即可。有人问了,难道make前面不需要加!嘛。 呵呵,不需要的,该命令和在终端下执行
make一样,只不过Vim会把编译信息截获然后重新整理。回到Vim之后,如果没错,那么你
即可以不用后面的动作了,如果有编译错误需要修复,则执行:
:cw
cw[check window]执行后会在当前窗口的下方新建一个新窗口,然后将刚才执行make得到
的所有编译错误和警告信息都输出在该窗口内,如同Visual Studio和Delphi里面一样。
不过比VS和Delphi更方便的是,你是不需要使用鼠标来一个一个点击错误信息,然后跳转
到对应的错误行。你只需要输入:
:cn
:cp
就可以在所列出的error和warning之间跳转,光标会直接跳转到源文件中的那行代码上。
直到你修改完毕之后, 再次执行:make,quickfix窗口内的信息会自动更新,然后重复以
上操作,直到所有编译error和warning消失。
要退出quickfix窗口的话,你可以把它当作普通的窗口,使用:q来退出,也可以直接再次
执行:cw来退出。
是不是十分方便,如果quickfix的名字一样,可以快捷地修复error和warning。
自此,对于插件的介绍,特别是编程相关插件的介绍即到此为止了。 Vim拥有数量巨大的
插件可供选择,并且对不不同的语言有着不同的插件,用处也不尽相同,读者可以到官网
上自行查找安装。
值得注意的是,Vim在每次开启后会载入plugin内的插件脚本。 因此如果安装插件过多的
话,Vim的启动速度会明显变慢,这和Firefox是一样的。插件虽好,不可贪多哦(恶…)。
总结
本文档到此结束了,基本上介绍到了Vim使用中的需要涉及到的基本范围。当然,Vim中还
有着其他的功能没有介绍, 比如:Vim脚本语言、缩写替换、对其他语言的接口、diff操
作、二进制模式、拼写检查、文件加密等等。所有没有提及到的方面,读者可以查看相关
书籍以及自带的帮助文档。