YouCompleteMe是一个随键而动的、支持模糊搜索的、高速补全的插件。YCM由google公司搜索项目组的软件工程师Strahinja Val Markovic所开发,YCM后端调用libclang(以获取AST,当然还有其他语言的语义分析库)、前端由C++开发(以提升补全效率)、外层由 python 封装(以成为 vim 插件),它可能是我见过安装最复杂的vim插件了。
安装前提条件及分析
vim 7.3.584+
vim支持Python 2.6+
cmake
clang 3.3+
gcc/g++ 4.7+(支持c++11)
分析上面的这些前提条件,在CentOS 6.6上我们将需要做大量的升级工作:
1.gcc默认版本是4.4.7,不支持C++11,需要将gcc升级到4.8.2
2.vim默认不支持python,需要从源码编译并安装vim,在配置时加入对Python的支持
3.clang需要LLVM编译器框架,需要编译安装LLVM+clang
4.需要升级c++库到C++标准,需要安装clang标准库libc++,libc++abi.so等等
安装依赖库
yum -y install gcc-c++ subversion git
从源码编译支持Python 2.7.10的vim,参见
http://blog.csdn.net/tao_627/article/details/50444866
http://blog.csdn.net/tao_627/article/details/49980815
将gcc升级到4.8.2,参见
http://blog.csdn.net/tao_627/article/details/50448924
http://blog.csdn.net/tao_627/article/details/50449283
编译YouCompleteMe插件
需要事先安装cmake,clang等
现假定你已经通过Vundle安装YCM,就是在~/.vimrc文件中加入
Bundle 'Valloric/YouCompleteMe'
然后用vim打开任意一个文件,比如
vim old.vimrc
在底部输入
:VundleInstall
这里Vundle会使用git自动下载YouCompleteMe的全部代码。此时我们会得到这样的错误提示:
Done! With errors; press l to view log
ycm_client_support.[so|pyd|dll] and ycm_core.[so|pyd|dll] not detected; you need to compile YCM before using it. Read the docs!
上述报错提示,需要安装ycm_client_support.so ycm_core.so,这需要编译YCM
假设YouCompleteMe的*目录是
~/.vim/bundle/YouCompleteMe创建一个新文件夹用于存放build的东西
cd ~
mkdir ycm_build
cd ycm_build
cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBclang=ON -DEXTERNAL_LIBCLANG_PATH=/usr/local/lib/libclang.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
这样会得到makefile文件,但是我们不会用到
cmake --build . --target ycm_support_libs
会在目录
/root/.vim/bundle/YouCompleteMe/third_party/ycmd
下面生成这三个库
libclang.so,ycm_core.so,ycm_client_support.so
修改配置文件.ycm_extra_conf.py,它是个隐藏文件,路径在
~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py在.vimrc文件中添加一行来进行全局设置
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py '
下面是使用Vundle安装YouCompleteMe插件的截图,易见没有报错信息:
参考文献
[1].http://valloric.github.io/YouCompleteMe/
[2].http://valloric.github.io/YouCompleteMe/#full-installation-guide
[3].http://www.linuxidc.com/Linux/2014-04/99719.htm