由于将要使用Linux环境编程,因此找到了一款自动补全神器:YouCompleteMe。安装使用的过程中遇到了很多问题,因此在此记录下最后的操作,以便重复。
对最后的结果,预期要求是能够在console的字符界面下直接使用vim进行方便的编程。
一、 安装符合要求的Vim
1、检查Vim
当前的Vim可以通过以下方式检查是否符合要求(版本要求Vim 7.3.584,以及对Python支持的要求):
$vim --version
得到的结果好长好长,只看第一行,例如我的就是:
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 28 2015 01:07:27)
Vim的版本是7.4
YouCompleteMe要求的最低版本是Vim 7.3.584,这个要求一般能达到。
第二个要求只要在Vim中支持Python,运行命令:
$vim --version | grep python
得到的结果里如果有 +python,而非 -python, 那么就符合要求了。
2、安装Vim
如果Vim不符合要求,那么只有自己搞了,例如我。主要参考YCM(YouCompleteMe的缩写)的Guide:
https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source
最容易出问题的是文中的以下命令:
./configure --with-features=huge \ --enable-multibyte \ --enable-rubyinterp \ --enable-pythoninterp \ --with-python-config-dir=/usr/lib/python2.7/config \ --enable-perlinterp \ --enable-luainterp \ --enable-gui=gtk2 --enable-cscope --prefix=/usr make VIMRUNTIMEDIR=/usr/share/vim/vim74其中的:
--with-python-config-dir=/usr/lib/python2.7/config目录需要修改成当前的python目录,我的是:/usr/lib/python2.7/config-x86_64-linux-gnu/ 或者/usr/lib/python3/config...根据python 的版本变化。
这一点作者在最后才提了一句,我就被坑的再编译了一次vim。
该文章的最后提了很多注意点,在参考的时候不要一步步跟着做,先看完先。
如果之前安装过vim,需要卸了再用这个方法编译,那么生成的新vim的程序所在目录有可能会在/usr/local/vim里面,使得无法直接调用。可以通过将vim链接到/usr/bin或者将/usr/loca/bin加入path。
最后一步是重复1、检查vim是否符合要求。
二、使用Vundle安装YCM。
1、安装Vundle
参考网址 https://github.com/gmarik/Vundle.vim
只有两步:安装、配置
安装:
$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
配置:
配置.vimrc文件。
这个文件是vim的配置文件,修改它使得vim与vundle能被vim找到。
参考网址给出的一个配置文件,将Plugin那一块中除了:
Plugin 'gmarik/Vundle.vim'
以外的全部都删除(因为都是示例,有些并不能使用)。
如果以后需要从git上添加插件,就在这一块加上Plugin "xxx" 其中xxx就是该插件的git网址的末尾部分,参考:
https://github.com/gmarik/Vundle.vim
=> "gmarik/Vundle.vim"
2、安装YCM
在Plugin块增加Plugin "Valloric/YouCompleteMe"。
打开vim,输入:
:PluginInstall
开始安装。YCM的安装时间较长,耐心的等待。
安装完毕后还不能直接使用,需要为其编译运行时的库。
到http://llvm.org/releases/download.html 下载与系统对应的pre-build binary,例如Ubuntu 14.04 就用Clang for x86_64 Ubuntu 14.04 (.sig),然后按照https://github.com/Valloric/YouCompleteMe#installation的 Full Installation Guide,操作,具体如下:
解压.tar.xz(可能不是这个后缀,那么就去搜一搜怎么解压)
第一: $xz -d xxx.tar.xz
第二:¥tar xvf xxx.tar
至此,得到一个文件夹:clang......
编译需要python-dev 的支持
$sudo apt-get install python-dev
在主目录建立文件夹:ycm_temp以及下属文件夹:ycm_temp/llvm_root_dir
将clang...中的所有子文件夹(bin,lib 等等)移动到ycm_temp/llvm_root_dir中。
然后在主目录建立一个文件夹并进入进行编译:
至此,YCM主体安装完成,但是使用起来还有很多不便之处,需要为每种语言配置文件。因此需要安装接下来的工具$ cd ~ $ mkdir ycm_build $ cd ycm_build $
cmake -G "
Unix Makefile
s"-DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
$ cmake --build . --target ycm_support_libs --config Release
3、安装rdnetto/YCM-Generator
YCM需要每位一个工程配置自己的配置文件,rdnetto/YCM-Generator就是用来自动生成配置文件的。
安装使用Vundle,在.vimrc文件的Plugin块中加入
Plugin “rdnetto/YCM-Generator”
然后在Vim中输入
:PluginInstall
安装就完成了。
使用时,如果需要为某工程设置配置文件,如果工程目录为 $DIR,并且makefile也在这个目录下,那么在 目录 ~/.vim/bundle/YCM-Generator/ 下有个config_gen.py,运行
$ ./config_gen.py $DIR
如果安装了相应的库,那么就搞定配置了,否则会提醒你安装相应库,按照指示安装即可。
三、使用YCM
默认情况下,YCM需要使用者按下Ctrl + Space才会开启跨文件的语义匹配。例如我在 test.h 中定义了函数 Foo() , 那么在 main.c 中,我输入了Fo之后,YCM并不会匹配到Foo,只有按下Ctrl + Space才会开启匹配。
如果嫌麻烦,可以在.vimrc文件末尾添加如下内容
let g:ycm_semantic_triggers = {}
let g:ycm_semantic_triggers.c = ['->', '.', ' ', '(', '[', '&']
这样基本任何一个操作都会引发一个匹配,然而也会导致满屏幕都被匹配弹窗占领。所以选择看个人吧。