最近重拾Vim,编译部署来补全插件YCM,这个插件的补全效果和在写C代码的时候的自动提示错误信息等仍是十分棒的,写点心得下来,也算给本身作个备忘。html
快速安装:python
首先参考个人.vimrc配置,用Vundle安装好以后,进入YCM的文件夹.vim/bundle/YouCompleteMe会找到install.sh脚本文件。这个时候若是你须要C语言系的语义补全你须要在运行install.sh脚本以后手动加入命令--clang-completer,便可进行自动安装,此时YCM会去Clang的官网去下载libclang.so来做为YCM语义补全的支持。c++
完整安装:git
1.若是采用以前的方法不能进行安装的话能够进行本身的定制化安装,YCM是一个编译插件,所以须要进行手动编译。首先第一点就要确保你的Vim的最低版本必须是7.3.584,而且支持python2。若是不支持,你必须本身手动编译一份Vim。(查看是否支持python2能够在Vim中输入:echo has('python')若是输出1就表示支持,0就表示这个时候你须要从新编译了)github
2.下载libclang.so,YCM做者推荐下载官方预编译以后的libclang.so而不是用你系统自带的libclang,若是你真的要用本身的sysytem中的libclang须要保证版本号大于等于3.3,不然会出现随机性的错误。数据库
3.编译ycm_support_libs库。首先确保本身安装了python-dev有python的头文件,而后创建临时文件夹ycm_buildjson
cd ~ mkdir ycm_build cd ycm_build cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
用CMake完成了生成Makefile的过程,注意这个过程是给那些不须要C语义补全的同窗,若是你须要C的语义补全,步骤会稍微麻烦点。你须要本身下载二进制发行版的LLVM+Clang或者本身手动编译LLVM和Clang,而后保证bin,lib,inclulde在文件夹根目录下好比ycm_temp/llvm_clang下,而后运行vim
cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
等待Makefile生成以后运行学习
make ycm_support_libs
即完成了ycm_supprot_libs的编译,对于那些想用系统libclang的同窗你须要传入-DUSE_SYSTEM_LIBCLANG=ON来替代-DPATH_TO_LLVM_ROOT的flag.若是你系统内有自定义的libclang你也能够定义采用自定义的libclang,-DEXTERNAL_LIBCLANG_PATH=/path/to/libclang.so.同时须要注意的是,若是你采用了Clang的语义补全支持,make命令也会把libclang复制一份放到YouCompleteMe/python下面来驱动YCM的运行。ui
使用:
完成了YCM的编译就能够享受它给你带来的方便了,若是你须要C语言的语义补全,除了刚刚编译多出来的步骤以外,你还须要提供编译的flag给YCM才能进行真正的补全。YCM查找.ycm_extra_conf.py来进行补全支持,你也能够手动提供一个全局的.ycm_extra_conf.py路径来给YCM作缺省处理(YCM查找路径是依次从里到外的向上,若是找不到会采起默认的全局路径,我选择放在主目录下面,这样不须要设置全局路径,由于YCM始终能够找到它)。
此外说一下.ycm_extra_conf.py,对于一些简单的小项目,使用默认的文件便可,对于默认文件我选择关闭了-Werror由于这样会给Vim提示语义准确的Syntastic带来困扰,另外我多加了一句-isystem,/usr/include/c++/4.8,由于我发现默认的ycm_extra_conf彷佛找不到C++头文件。对于复杂项目来讲,这个时候又须要借用咱们强大的CMake了。CMake中有一个命令能够导出编译flag,-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,这个时候CMake会把当前的编译flag所有导出到一个json数据库-compilation_commands.json,以后 咱们须要手动给ycm_extra_conf.py中的compilation_database_folder一行 添加你数据库的位置,好比你在src,ycm_ectra_conf在你目录下,而你的json在build中,因此你须要写floder=./build,这个时候打开Vim,你会发现你的项目已经能够进行补全,我在进行Qt开发的过程当中就是将CMake脚本维护好以后经过json来让YCM找到Qt的头文件从而进行补全,十分方便。
总结:都说Vim最强大的乐趣在于自由定制,我感受从Vim定制的过程当中也能够学习到不少东西,也会这就是定制给我带来的真正乐趣,迫使我去学习,迫使我去尝试各类状况。我相信喜欢Vim定制的人不在少数,此文就当抛砖引玉,但愿个人这篇文章可以帮助到你,同时也但愿志同道合的朋友能够留下你的脚印,毕竟有大家的支持才能让我更有写做的动力。