学习笔记之vi之C++环境配置之插件:自动补全命令

  • Post author:
  • Post category:其他


自动补全
用过Microsoft Visual Studio的朋友一定知道代码补全功能, 输入一个对象名后再输入”.”或者”->”, 则其成员名都可以列出来, 使Coding流畅了许多, 实现很多懒人的梦想, 现在我要告诉你, 这不再是Microsoft Visual Studio的专利了, vim也可以做到! 下面由我来教你, 该功能要tags文件的支持, 并且是ctags 5.6版本, 可以看看前文介绍tags文件的章节.

我这里要介绍的功能叫”new-omni-completion(全能补全)”, 你可以用下面的命令看看介绍:

:help new-omni-completion

你还需要在~/.vimrc文件中增加下面两句:

filetype plugin indent on

打开文件类型检测, 加了这句才可以用智能补全

set completeopt=longest,menu

关掉智能补全时的预览窗口

请确定你的Ctags 5.6已经安装好, 并且生成的tags文件已经可以用了, 那么我们就要抄家伙开搞了.

用vim打开源文件

$ vi /home/wooin/vim71/src/main.c

然后键入$ctags -R

设置tags文件

:set tags=/home/wooin/vim71/tags

随便找一个有成员变量的对象, 比如”parmp”, 进入Insert模式, 将光标放在”->”后面,

然后按下”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的帮助页。



版权声明:本文为citongke1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。