自动补全 | ||||||
用过Microsoft Visual Studio的朋友一定知道代码补全功能, 输入一个对象名后再输入"."或者"->", 则其成员名都可以列出来, 使Coding流畅了许多, 实现很多懒人的梦想, 现在我要告诉你, 这不再是Microsoft Visual Studio的专利了, vim也可以做到! 下面由我来教你, 该功能要tags文件的支持, 并且是ctags 5.6版本, 可以看看前文介绍tags文件的章节. 我这里要介绍的功能叫"new-omni-completion(全能补全)", 你可以用下面的命令看看介绍:
你还需要在~/.vimrc文件中增加下面两句:
请确定你的Ctags 5.6已经安装好, 并且生成的tags文件已经可以用了, 那么我们就要抄家伙开搞了. 用vim打开源文件
然后键入$ctags -R 设置tags文件
然后按下"Ctrl+X Ctrl+O", 此时会弹出一个下列菜单, 显示所有匹配的标签. |
PS:上述方法没有在自己的vim实现,设置的是C 语言文件。
要想在C++文件中实现,则按如下步骤进行:
(相关链接:http://easwy.com/blog/archives/advanced-vim-skills-omin-complete/)
如果要支持C++的全能补全,需要到vim主页下载OmniCppComplete插件,链接如下:
http://www.vim.org/scripts/script.php?script_id=1643
下载后,把它解压到你的.vim目录(在windows下是vimfiles目录),它会安装以下文件:
after\ftplugin\cpp.vim autoload\omni\common\debug.vim \utils.vim autoload\omni\cpp\complete.vim \includes.vim \items.vim \maycomplete.vim \namespaces.vim \settings.vim \tokenizer.vim \utils.vim doc\omnicppcomplete.txt
确保你已关闭了vi兼容模式,并允许进行文件类型检测:
set nocp filetype plugin on
接下来,使用下面的命令,为C++文件生成标签文件,假定你的文件在src目录树下:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src
在对C++文件进行补全时,OmniCppComplete插件需要tag文件中包含C++的额外信息,因此上面的ctags命令不同于以前我们所使用的,它专门为C++语言生成一些额外的信息,上述选项的含义如下:
--c++-kinds=+p : 为C++文件增加函数原型的标签 --fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S) --extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
现在,进入vim,设置好tag选项(我在前面的文章中介绍过)。好极了,vim能够对C++自动补全了!
我写了一个简单的例子,来演示C++的自动补全功能,如下图所示,在输入”t.“后,OmniCppComplete插件
会自动弹出struct test1的成员供选择,而在输入”b->“后,又会自动弹出class base的成员供选择,非常方便,
连”CTRL-X CTRL-O“都不必输入。OmniCppComplete插件的缺省设置比较符合我的习惯,因此不须对其设
置进行调整,如果你需要调整,参阅OmniCppComplete的帮助页。