Centos安装YouCompleteMe
  折腾了一天,总算把YCM装上了,在这里进行一下总结。安装分为快速安装和完整安装,官方推荐完整安装,但大家可以先试一下快速安装,如果不成功再进行完整安装。需要注意的是YouCompleteMe要求Vim版本大于等于7.3,在进行安装前大家需要确定这点。
安装YouCompleteMe
  首先确定YCM的安装方式,分为两种:使用Vundle和使用源代码安装,注意此步仅仅相当于安装了一个空壳,并不能使用YCM,还需要后续步骤。
(1)使用Vundle安装
  Vundle是Vim的一款管理插件的插件,安装详细请参照Vundle官方网站。注意把官网下方的配置文件放入你自己的.vimrc里,可以把不需要的插件去除。
在你的vimrc中添加Plugin 'Valloric/YouCompleteMe'
,然后执行:PluginInstall。
注:使用Vundle更新YCM的时候可能需要重新编译,引用来自官方的提示:
YCM is a plugin with a compiled component. If you update YCM using Vundle and the ycm_support_libs library APIs have changed (happens rarely), YCM will notify you to recompile it. You should then rerun the install process.
(2)使用源码安装
#下载YouCompleteMe源码
git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe
cd YouCompleteMe/
#获取YCM的依赖包
git submodule update --init --recursive
#然后在在vimrc文件中加入
Bundle 'Valloric/YouCompleteMe'
快速安装
此处给出支持C-family的命令,其他的选项见参考文档。
cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer
之后会看到提示安装成功。
参考:Fedora Linux x64 Installation
完整安装
1、安装svn、cmake
  sudo yum install svn
因为centos直接使用yum安装的版本号为2.8.11,而llvm源码编译安装不再支持make,需要的cmake要求最低为2.8.12,所以需要源码安装cmake。CMake 2.8.12.2 or higher is required. You are running version 2.8.11
(1)下载最新源码
https://cmake.org/download/进入文件下载目录
tar -xzvf cmake-3.4.3.tar.gz
(2)进入到cmake文件夹中执行引导命令(此时会检查gcc ,gcc-c++是否安装,如果没有请先安装)
cd cmake-3.4.3 yum install gcc yum install gcc-c++ ./bootstrap
(3)安装
make make install
(4)添加环境变量,使其永久有效:
vim /etc/profile
在文件末尾追加以下两行代码:PATH=/usr/local/cmake/bin:$PATH export PATH
然后执行以下操作:
source /etc/profile //使修改生效
echo $PATH //查看PATH值
验证cmake是否安装成功:
[root@localhost cmake-3.4.3]# cmake -version
cmake version 3.4.3
CMake suite maintained and supported by Kitware(kitware.com/cmake).
参考:Getting Started with the LLVM System
   Building LLVM with CMake
2、新建目录,编译安装llvm-clang
#Checkout LLVM:
mkdir ~/llvm-clang
cd ~/llvm-clang
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
#Checkout Clang:
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
#Checkout extra Clang Tools:
cd /clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
#Checkout Compiler-RT:
cd ~/llvm-clang/llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
#Checkout Libomp (required for OpenMP support):
svn co http://llvm.org/svn/llvm-project/openmp/trunk openmp
#cd where you want to build llvm
cd ~/llvm-clang
mkdir llvm-build(in-tree build is not supported)
cd llvm-build
cmake -G "Unix Makefiles" ../llvm
make
参考:Getting Started: Building and Running Clang
   Getting Started with the LLVM System
3、安装Python
如果系统没有装有python及其有关库,则需安装:
#安装python
`sudo yum install python`
#安装python所需要的库
`sudo yum install python-devel`
4、编译YCM需要的ycm_support_libs库
创建一个文件夹来存放编译文件
cd ~
mkdir ycm_build
cd ycm_build
下一步生成makefile,这一步很重要,有点复杂。
- 如果不需要C-falmily的语义支持:在ycm_build目录下执行:
cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
- 如果需要C-falmily的语义支持,分三种情况:
(1)假如你从llvm的官网下载了LLVM+Clang,然后解压到:/ycm_temp/llvm_root_dir (该目录下有 bin, lib, include 等文件夹),然后执行:/ycm_temp/llvm_root_dir ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
`cmake -G “Unix Makefiles” -DPATH_TO_LLVM_ROOT=(2)如果想用系统的libclang:
cmake -G “Unix Makefiles” -DUSE_SYSTEM_LIBCLANG=ON ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp(3)如果想用自己编译的libclang:
cmake -G “Unix Makefiles” -DEXTERNAL_LIBCLANG_PATH=/path/to/libclang.so ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp其中/path/to/libclang.so这部分填入你自己的路径。 然后执行
make ycm_support_libs`,就完成了整个的安装过程。
YouCompleteMe配置:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => YouCompleteMe 代码自动补全
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Bundle 'Valloric/YouCompleteMe'
" youcompleteme 默认tab s-tab 和自动补全冲突
" let g:ycm_key_list_select_completion=['<c-n>']
" let g:ycm_key_list_select_completion = ['<Down>']
" let g:ycm_key_list_previous_completion=['<c-p>']
" let g:ycm_key_list_previous_completion = ['<Up>']
let g:ycm_confirm_extra_conf=0 " 关闭加载.ycm_extra_conf.py提示
let g:ycm_complete_in_comments = 1 "在注释输入中也能补全
let g:ycm_complete_in_strings = 1 "在字符串输入中也能补全
let g:ycm_collect_identifiers_from_tags_files=1 " 开启 YCM 基于标签引擎
let g:ycm_collect_identifiers_from_comments_and_strings = 1 "注释和字符串中的文字也会被收入补全
let g:ycm_seed_identifiers_with_syntax=1 "语言关键字补全, 不过python关键字都很短,所以,需要的自己打开
let g:ycm_collect_identifiers_from_tags_files = 1
let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项
" 引入,可以补全系统,以及python的第三方包 针对新老版本YCM做了兼容
" old version
if !empty(glob("~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py"))
let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py"
endif
" new version
if !empty(glob("~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py"))
let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py"
endif
"mapping
nmap <leader>gd :YcmDiags<CR>
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR> " 跳转到申明处
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR> " 跳转到定义处
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
" 直接触发自动补全
let g:ycm_key_invoke_completion = '<C-Space>'
" 黑名单,不启用
let g:ycm_filetype_blacklist = {
\ 'tagbar' : 1,
\ 'gitcommit' : 1,
\}
参考:YouCompleteMe配置
   Vim智能补全插件YouCompleteMe安装