对于C/C++自动补全一般涉及三个插件:
ctags+OmniCppComplete
clang环境+ clang_complete
Ctags 全名 Exuberant Ctags,是一个独立的程序(也就是说,其实和 Vim 一点关系都没有)。它可以为各种语言的源代码生成语言元素(language object)索引文件。对于 C/C++ 来说,就是把源代码中的各种宏、函数、类、类成员等等元素和它们的相关信息生成索引文件,供其它程序使用。 OmniCppComplete 就是专为 C/C++ 编写的 OmniComplete 一个补全脚本,是根据ctags生成的索引文件进行自动补全,如果没有ctags文件,OmniCppComplete
1 ctags安装
先从网上下载tags插件,同样解压复制到~/.vim/bunlde/ctgas
sudo apt-get install ctags
由于需要进行C++类等元素补全,故需要进行索引,先下载好C++库,从http://download.csdn.net/detail/yanerhao/9292789下载好
再解压tar zxvf jsoncpp-src-0.5.0.tar.gz
再进入解压后的目录,比如C++库文件为解压到了目录~/下载
那么:cd ~/下载/jsoncpp-src-0.5.0
输入ctags -R。完成后会产生一个tags文件。将生成的ctags文件复制到~/.vim/tags的目录下。
打开vim配置文件vimrc:vim ~/.vimrc
首先是自动加载tags,在vimrc中加入:
set tags+=~/.vim/bundle/ctags/tags
2 下载安装OmniCppComplete
类似上一篇对vim插件的安装,OmniCppComplete作为插件:
从http://download.csdn.net/detail/yanerhao/9297483下载好
解压,放到pathogen(是vim管理器)管理下的~/.vim/bundle下
在 vimrc 文件中加入
其中“表示注释
" ctags 索引文件 (根据已经生成的索引文件添加即可, 这里我额外添加了 hge 和 curl 的索引文件)
set tags+=D:/ctags/tags/cpp
set tags+=D:/ctags/tags/hge
set tags+=D:/ctags/tags/curl
" OmniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1 " 输入 . 后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest
使用vim的 OmniCppComplete 。这一类的插件都是对 Ctags 生成的符号表进行字符串匹配来获得可能的补全项。他们在编写 C 代码的时候还是很好用的,但是到了 C++ 的环境情况就不同了,各种作用域的存在使得仅仅依靠符号表匹配的方式完全无法发挥作用。新时代的编译器 Clang,这个基于 LLVM 的编译器有着比 GCC 更快的编译速度和更人性化的错误提示,并且支持 C, C++, Objective-C 和 Objective-C++。更重要的是 Clang 提供了大量的 API 来供第三方应用调用,甚至直接就有获得自动补全提示的接口。
我们今天的主角 clang_complete 就是一款基于 Clang 的插件。
首先安装clang环境:
sudo apt-get install clang
下载clang_complete类似上一篇插件安装
插件的项目地址https://github.com/Rip-Rip/clang_complete
下载后进入目录执行
make install
即可完成安装
如果安装没有成功,可能你没有这几个包,clang和libclang-dev,libclang1,libclang1-dbg,安装即可
vim安装clang_complete报错"Loading libclang failed, completion won't be available. Consider setting g:clang",解决办法:
安装libclang
apt-get install libclang-3.5-dev
这时libclang.so应该位于/usr/lib/llvm-3.5/lib/libclang.so
然后添加clang_complete的配置到vim里
let g:clang_use_library = 1
let g:clang_library_path = '/usr/lib/llvm-3.5/lib/'
第二个功能使用的是autocomplpop
插件下载http://www.vim.org/scripts/script.php?script_id=1879
将目录拷贝到~/.vim这个目录中即可,安装完毕。
然后在/etc/vim/vimrc中添加:
let g:clang_complete_copen=1
let g:clang_periodic_quickfix=1
let g:clang_snippets=1
let g:clang_close_preview=1
let g:clang_use_library=1
let g:clang_user_options='-stdlib=libc++ -std=c++11 -IIncludePath'
let g:neocomplcache_enable_at_startup = 1
注意在退出vimrc有可能出现要求安装library,安装此插件即可
http://download.csdn.net/detail/yanerhao/9308737,解压复制到~/.vim/bundle。
另外在安装clang_complete时如出现下面问题:
echoe 'clang_complete: No python support available.'
echoe 'Cannot use clang library'
echoe 'Compile vim with python support to use libclang'
2.在终端输入 sudo apt-get install vim-nox-py2
3.安装完成后在查看是不是支持 python,显然从 +python3 换成了 +python
4.sudo update-alternatives --config vim 可以让你在+ python 和+ python3 之间切换