从图书馆里面借的那本《vi和vim编辑器》马上就要还掉了。有点舍不得,自己虽然没看多少,想着赶快再看一会吧。
想想自己在linux上面写数据结构,没有代码补全还是比较麻烦的。于是就翻到了代码自动补全这里。
在说代码补全之前,还是得先再复习 一下ctags标签,下面这段话摘自wooin:
哇,这下可厉害了, Tag文件(标签文件)可是程序员的看家宝呀,你可以不用它,但你不能不知道它,因为Linux内核源码都提供了"make tags"这个选项.下面我们就来介绍Tag文件.
tags 文件是由ctags程序产生的一个索引文件, ctags程序其是叫"Exuberant Ctags",是Unix上面ctags程序的替代品,并且比它功能强大,是大多数Linux发行版上默认的ctags程序.那么tags文件是做什么用的呢?如果你在读程序时看了一个函数调用,或者一个变量,或者一个宏等等,你想知道它们的定义在哪儿,怎么办呢?用grep?那会搜出很多不相干的地方.现在流行用是的<C-]>,谁用谁知道呀,当光标在某个函数或变量上时,按下"Ctrl+]",光标会自动跳转到其定义处,够厉害吧,你不用再羡慕Visual Studio的程序员了,开始羡慕我吧~_~.
你现在先别急着去按<C-]>,你按没用的,要不要我干什么呀,你现在要做的是查查你电脑里有没有ctags这个程序,如果有,是什么版本的,如果是Ctags 5.5.4,就象我一样,你最好去装一个Ctags 5.6,这个在后面的自动补全章节中会用到.在这个网站: http://ctags.sourceforge.net,下载一个类似ctags-5.6.tar.gz的文件下来(现在好像5.7版的也出来了,不过我还没用过):
用下面的命令解压安装:
$ tar -xzvf ctags-5.6.tar.gz |
然后去你的源码目录,如果你的源码是多层的目录,就去最上层的目录,在该目录下运行命令: ctags -R
我现在以 vim71的源码目录做演示
$ cd /home/wooin/vim71 |
此时在/home/wooin/vim71目录下会生成一个tags文件,现在用vim打开/home/wooin/vim71/src/main.c
$ vim /home/wooin/vim71/src/main.c |
再在vim中运行命令:
:set tags=/home/wooin/vim71/tags |
该命令将tags文件加入到vim中来,你也可以将这句话放到~/.vimrc中去,如果你经常在这个工程编程的话.
下面要开始真刀实枪的开干了,如下图,将光标放在setmouse()函数上
(--- 图3 ---)
此时按下<C-]>,光标会自动跳到setmouse()函数的定义处,见下图:
(--- 图4 ---)
如果此时你还想再跳回刚才的位置,你还可以按<C-T>,这样又跳回到setmouse()函数被调用的地方了,变量,结构,宏,等等,都可以的,赶快试试吧.....
此时在回头学习一下第3节中说的vim手册吧
:help usr_29 |
不过还有一个小瑕疵,你修改程序后,比如增加了函数定义,删除了变量定义, tags文件不能自动rebuild,你必须手动再运行一下命令:
$ ctags -R |
使tags文件更新一下,不过让人感到欣慰的是vim不用重新启动,正在编写的程序也不用退出,马上就可以又正确使用<C-]>和<C-T>了.
我自己的工作目录是在home下的Linux-software下面,所以自己是在.vimrc里面添加了下面这句话:
:set tags=/home/gaoxin/Linux-software/tags (当然了gaoxin是我的家目录名称),这样每次打开新的文件的时候都能用到tags文件里面的标签了,:-)
好了,复习完了ctags之后,可以开始看代码补全了下面列出了不同的代码补全方法:
Ctrl+X Ctrl+L |
整行补全 |
Ctrl+X Ctrl+N |
根据当前文件里关键字补全 |
Ctrl+X Ctrl+K |
根据字典补全 |
Ctrl+X Ctrl+T |
根据同义词字典补全 |
Ctrl+X Ctrl+I |
根据头文件内关键字补全 |
Ctrl+X Ctrl+] |
根据标签补全 |
Ctrl+X Ctrl+F |
补全文件名 |
Ctrl+X Ctrl+D |
补全宏定义 |
Ctrl+X Ctrl+V |
补全vim命令 |
Ctrl+X Ctrl+U |
用户自定义补全方式 |
Ctrl+X Ctrl+S |
拼写建议 |
数据结构中用到最多的肯定就是结构体了。下面看下这个全能补全功能:
我这里要介绍的功能叫"new-omni-completion(全能补全)",你可以用下面的命令看看介绍:
:helpnew-omni-completion |
你还需要在~/.vimrc文件中增加下面两句:
filetype pluginindent on |
打开文件类型检测,加了这句才可以用智能补全
setcompleteopt=longest,menu |
关掉智能补全时的预览窗口
请确定你的Ctags5.6已经安装好,并且生成的tags文件已经可以用了,那么我们就要抄家伙开搞了.
用vim打开源文件
$ vi/home/wooin/vim71/src/main.c |
设置tags文件
:settags=/home/wooin/vim71/tags |
随便找一个有成员变量的对象,比如"parmp",进入Insert模式,将光标放在"->"后面,
然后按下"Ctrl+XCtrl+O",此时会弹出一个下列菜单,显示所有匹配的标签,如下图:
(---图18---)
此时有一些快捷键可以用:
Ctrl+P |
向前切换成员 |
Ctrl+N |
向后切换成员 |
Ctrl+E |
表示退出下拉窗口,并退回到原来录入的文字 |
Ctrl+Y |
表示退出下拉窗口,并接受当前选项 |
如果你增加了一些成员变量,全能补全还不能马上将新成员补全,需要你重新生成一下tags文件,但是你不用重启vim,只是重新生成一下tags文件就行了,这时全能补全已经可以自动补全了,还真够"全能"吧.
下面这张截图是help文档里面关于new-omni-completion:
好。代码补全又复习了一遍,下次写数据结构应该会省很多时间了^_^