YouCompleteMe 踩坑记
最近转移到了 Ubuntu 系统上,配了一波环境,逐步适应了些 Vim,虽然一开始觉得没有补全无所谓的,可以练练实力,再安装插件觉得麻烦,但后面还是觉得没有补全少点什么,于是决定还是下个 Vim 补全的插件。大约刻之前在赵老板博客上看到过一个关于 Vim 补全的插件赵老板博文链接,所以打算用那个,也就是 YouCompleteMe。据说这是 Vim 最难安装的插件?
安装步骤并不算麻烦吧:
- 安装 Vundle(Vim插件管理)
- 用 Vundle安装编译YouCompleteMe
- 配置 YouCompleteMe
前期工作
- 确认你的 vim 版本在 7.3.584 以上。
- 确认你的电脑支持 Python 2.x。
- 需要 Vundle(vim 的插件管理工具)来管理你的插件。
- 安装脚本需要使用 CMake。
以上几点大家如果没有配置好的话,网上有很多很详细的教程,这里就不细讲了。(完全照抄赵老板博客)
安装 Vundle
这个网上教程蛮多的,照抄就好了,我说几个坑点。
首先是 Vundle 的语法,安装完 Vundle 后,我们要在.vimrc 中加入一些东西,我当时是复制 Vundle 的 github 中的原文,因为一开始,也并不知道这些东西是啥意思,后来猜出了一些语法后,才发现自己被这个官方的命令坑得不清。
| 1 | set nocompatible " be iMproved, required | 
首先这里面 “ 表示注释,以 Plugin 开始的每行是注明 Vundle 中有这个插件(后面安装的时候要下载)。这个文件是为了给我们演示语法。。所以这里面很多的 Plugin 可以不安装!里面有个 git 下了我不知多长时间…… 还有个本地仓库,555,当时不清楚,一直安装不成功,以为自己操作错了。后来看懂了语法,心想:woc,这什么傻 x 东西。遂注释掉。
安装 YouCompleteMe
- 在上面说的.vimrc的Vundle中加入YouCompleteMe
| 1 | call vundle#begin() | 
- 之后进入 - Vim,输入命令- 1 - :BundleInstall - 或者在终端中 - 1 - vim +PluginInstall +qall 
- 之后我们进入 - YouCompleteMe文件夹- 1 - cd ~/.vim/bundle/YouCompleteMe/ - 执行安装脚本,根据需要添加参数。由于我用 vim 是写 C++ 的,所以选择添加了 C-family 的语言支持。其他语言版本参数的加法可以参照 Github 上 README 里的说明。 - 1 - ./install.py --clang-completer - 但这一步它告诉我找不到 - python 2.7… 怎么会,我明明安好了的,就在它说的文件夹。。神奇,后来我玄学了一波,安装了下- python 3,本来以为没啥用。。结果… 就好了,神奇。
- 等待它编译成功。(这一步我没遇到啥问题) 
配置 YouCompleteMe
.ycm_extra_conf.py 文件
下面我们要配置下 YouCompleteMe,(即.ycm_extra_conf.py 文件),让它发挥最大作用。
这个文件可以在 Github 中找到,我这里也链接了一下。为了方便,我把他放在了 ~/.vim 文件夹中。后来发现这个文件有很多没用的 (那一些’-isystem’, ‘cpp/…’这些路径),遂删之,留下了比较重要的东西。然后在.vimrc 的适当位置(就刚才那段里面)写上
| 1 | call vundle#begin() | 
最重要的一步呢,是要根据你电脑在.ycm_extra_conf.py 中的 flags 加一些头文件包含路径。比如我的是
| 1 | '-isystem', | 
添加的时候注意些格式,大概就是 ‘-isystem’然后有个逗号,下面加路径。
注意这里有坑啊!我在这坑上调了好久才发现问题! 这些路径的顺序是有一定讲究的,因为一开始顺序错了,YCM 补全总有些问题,具体啥讲究我也不清楚,在网上看到 /usr/include/c++/7 一定要在 /usr/include 前面。啊,我在这上面找了好久的问题。。。这坑太大了。
.vim 文件 Vundle 中对 YCM 一些个性化配置
我总以为 YCM 会对库函数有提示补全什么的,结果默认是没有的(害我以为我配置有问题,捣鼓了好久)。对 YCM 的一些个性化配置我主要参考了 YouCompleteMe 中容易忽略的配置。包括
- 库函数补全
- 语义补全自动触发
- 补全对话框颜色的修改
- 关闭补全时分屏提示
- 关闭代码检查诊断信息
- 设置一下:g:ycm_filetype_whitelist 白名单