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

自动补全
 用过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的帮助页。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值