- Published on
YCM 配置笔记
- Authors
- Name
- zwindl
- @zwindl
来由
当程序的规模逐渐庞大的时候,仅凭大脑来记忆各种类名和成员的命名显然是很愚蠢的 于是这时就需要一个能够自动补全的工具,前些天一直使用 vim-omnicppcomplete 来实 现这个功能,但是 ctags 不是一个基于语义分析的工具,而是生成一个静态的列表,存 储在文件中,效率虽然不差,但是每次添加了新的类或者修改了成员后,都要重新生成 ctags 的文件,甚是繁琐。
这时一个叫 YouCompleteMe 的插件出现了(同样来源于 quininer 大神的提醒) 而且这个插件是基于语义补全的,正是我想要的特性。在这里记下配置过程,以备以后查阅。
安装
What U Need?
- cmake
- vundle 插件 这貌似是个管理插件的插件
- 较快的网速!!
- 如果是 deb 系的发行版,请安装 python-dev
How to Do?
从 aur 构建 vundle
这里有点疑问
依据 VundleOnGitHub 上的内容
Configure Plugins:
Put this at the top of your .vimrc to use Vundle. Remove plugins you don't need, they are for illustration purposes.
- 这里有一段配置代码(略)
但是根据 aur 构建完 vundle 后的提示信息
>>> To use vundle, please check the file /usr/share/vundle/vimrc.sample
>>> and update your ~/.vimrc file, accordingly
也就是指向那个 vimrc.sample 文件中的信息
我做了比较,发现内容有出入,而 arch wiki:VIM#using a plugin manager 关于 vundle 的描述也只是一句话 = =; 在这里好迷茫
我决定相信 aur 中的提示信息
接下来根据 GitHub 上的介绍,用 vundle 安装插件的方法就是很简单的命令了
Launch vim and run :PluginInstall
To install from command line: vim +PluginInstall +qall
然后根据 GitHub 上 YCM 的 Full-Installation-Guide 的指示 先进入 vim 然后执行 :version
来查看版本,如果 <= 7.3 可能会有一些麻烦(除非特别老旧的发行版版本,不然正常发行版提供的 vim 包应该 都是 7.4 or 7.4+)
#####接下来是安装 YCM 插件
在 vimrc 中添加一行
Plugin 'Valloric/YouCompleteMe'
下面这一步骤有点特殊,如果你经常使用的语言不是 C-family 的,那么就可以省略掉了
下载最新的 libclang 包, clang 编译器提供了有力的 C-family 语言的语义分析功能,官方推荐下载 3.6+ 的版本,不过 3.2 也可以接受.
请下载 official binaries from llvm.org 而不是使用系统自带的 libclang 包 或者是自行编译的包。
然而我在 aur 里看到了 vim-clang-complete 这样的包 0.0 这是怎么回事...
(以后可能会另开一篇博文写关于 clang 的内容)
特殊的一步结束了
下面这一步需要安装 cmake 如果没有按照文章开头的要求做好准备,现在就安装 cmake 吧
在 vim 中输入 :help vundle
,按照手册中的提示,键入 :PluginInstall
然后,会启动一个特别的界面,提示正在安装 YCM 插件,这时候界面是不动的,不要输入任何东西 ,静静等待就是了.... 第一次安装以为是卡住了,查看了网速发现走的飞快,才知道是在安装中
等待安装结束(没有提示)后,执行如下创建文件夹的命令,用来存放中间文件 cd ~ mkdir ycm_build cd ycm_build
现在,如果你不关心 C-family 语言的语义分析功能,执行
cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
强烈建议打开 -DUSE_SYSTEM_BOOST=ON 选项
如果关心 C-family 语言语义分析
- 在 ~/ 中新建文件夹 ycm_temp/llvm_root_dir
- 解压之前下载的 clang 包
- 将解压内容放入新建的文件夹中
- 执行
cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
- 现在 makefiles 已经创建完成,继续执行
make ycm_support_libs
如果执行完毕,没有报错,说明安装完成了,不过我出现了如下错误
Linking CXX shared library /home/zwindl/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so
/home/zwindl/ycm_temp/llvm_root_dir/lib/libclang.so: error adding symbols: 文件格式错误
collect2: 错误:ld 返回 1
ycm/CMakeFiles/ycm_core.dir/build.make:588: recipe for target '/home/zwindl/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so' failed
make[3]: *** [/home/zwindl/.vim/bundle/YouCompleteMe/third_party/ycmd/ycm_core.so] Error 1
CMakeFiles/Makefile2:165: recipe for target 'ycm/CMakeFiles/ycm_core.dir/all' failed
make[2]: *** [ycm/CMakeFiles/ycm_core.dir/all] Error 2
CMakeFiles/Makefile2:209: recipe for target 'ycm/CMakeFiles/ycm_support_libs.dir/rule' failed
make[1]: *** [ycm/CMakeFiles/ycm_support_libs.dir/rule] Error 2
Makefile:148: recipe for target 'ycm_support_libs' failed
make: *** [ycm_support_libs] Error 2
正在解决这些问题,不过从 aur 中安装通过了,初步判断是有部分文件没有下载完整
详细配置过程后续更新
##更新
问题已解决,确实是文件没有下载完,程序就卡死了
配置
最后,终于能尽情使用了,简单测试了一下,没有明显的卡顿感
2015 07 23 更新
关于 .ycm_extra_conf.py 的配置问题,建议参考这个项目 newycm_extra_conf.py; 使用方便,可以解决 C++ 不能补全标准库的问题