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,这一步很重要,有点复杂。

  1. 如果不需要C-falmily的语义支持:在ycm_build目录下执行:
    cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
  2. 如果需要C-falmily的语义支持,分三种情况:
    (1)假如你从llvm的官网下载了LLVM+Clang,然后解压到:/ycm_temp/llvm_root_dir (该目录下有 bin, lib, include 等文件夹),然后执行:
    `cmake -G “Unix Makefiles” -DPATH_TO_LLVM_ROOT=
    /ycm_temp/llvm_root_dir ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp (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配置
&emsp;&emsp;&emsp;Vim智能补全插件YouCompleteMe安装