2019 YouCompleteMe最新安装指南

YouCompleteMe基本介绍

   YouCompleteMe(以下简称YCM)是Linux Vim编程环境下一个功能非常强大的代码补全工具,由 google 软件工程师 Strahinja Val Markovic开发,可作为Vim的一个插件,使得Vim获得类似于Windows IDE的代码补全效果。

   但是,由于对很多插件具有依赖,如Python3, Clang等,YCM素来有Vim史上最难安装插件之说,我在尝试了一周之后终于安装成功。在这个过程中,踩了无数坑,发现即使是官方教程和许多博客,由于未及时更新,很难再完全用得上,此处将我的完整安装过程分享在这篇博客中,希望能帮助到喜欢折腾Vim的朋友们。

1.Vim版本检查

   YCM对于Vim的版本有严格的要求,必须在7.4.1578及以上(支持Python3),可通过

vim --version

进行查看。本人使用的系统为Ubuntu18.04,vim版本为8.0,查看结果如图所示:
在这里插入图片描述
   若Vim的版本不符合要求,则需要自行升级安装,推荐8.0及以上版本。

2.安装相关库和依赖

   若要补全某一种语言,需要进行相关库的安装。由于本人日常使用C语言,因此在此介绍C家族语义补全的相关库和依赖。

  1. 安装Cmake
    apt-get install cmake
  2. 安装LLVM+Clang
       YCM官方推荐使用llvm.org的官方较新的libclang二进制文件代替系统自带libclang,此处我安装的是6.9版本。
    apt-get install llvm-6.9 clang-6.9 libclang-6.9-dev libboost-all-dev
  3. 安装Python3 Header
    apt install build-essential cmake python3-dev

   在这里还需要进行一次系统默认使用Python3(网上找到的方法),在shell中输入:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

   否则在后面运行./install.py --clang-completer安装YCM时,需要改为python3 install.py --clang-completer

3.安装Vundle

   Vundle是一款好用的Vim插件管理器,可方便的进行Vim插件的安装和卸载,推荐使用它来安装YCM。Vundle的官方安装教程可在Github找到,在此简单介绍一下我的安装和配置:

  1. Clone vundle.vim到本地~/.vim/bundle/文件夹中
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle//Vundle.vim

   注意,git需要通过apt-get install git提前安装。

  1. 配置vundle并添加YCM插件

在Vimrc文件中加入以下代码段以启用vundle,并加入YCM。

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'Valloric/YouCompleteMe’
call vundle#end()            
filetype plugin indent on
  1. 运行Vundle安装YouCompleteMe

   首先,输入vim进入Vim界面,在命令行中输入:PluginInstall,等待一段时间后,即提示YCM安装完成,但底部会提示YouCompleteMe Unavailable,原因在于YCM的安装分两步,还需要再执行Python脚本,或者运行Shell脚本。

   cd ~/.vim/bundle/YouCompleteMe进入YCM的文件夹,使用./install.py --clang-completer命令执行安装脚本。clang-completer为C-family补全,其他语言可参见官方说明。

4.编辑.ycm_extra_conf.py

    此处一个很坑的地方,就是官方教程并未明确指出,安装结束后不配置 .ycm_extra_conf.py文件也是没法用YCM的。此python文件用于配置YCM。

1.复制 .ycm_extra_conf.py 文件到当前目录
    首先,我们需要找到 .ycm_extra_conf.py文件的位置。YCM成功安装后会生成许多.ycm_extra_conf.py文件,可通过find / -name .ycm_extra_conf.py进行查找。
在这里插入图片描述
   默认YCM会检索当前文件夹内是否存在.ycm_extra_conf.py文件,否则ycm会从项目的文件开始,一步一步往上查找配置文件,如果没找到,就按照默认路径(Vimrc文件中手动指定)去加载该文件,检索不到就会报错。默认加载优先级为当前目录>默认目录

   推荐在每个工程文件夹目录下新建一个.ycm_extra_conf.py文件(~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py中复制一个过去),这样每次打开当前目录的C文件就会提示是否加载.ycm_extra_conf.py,以此达到根据不同工程的需要而自由定制YCM的效果。
2. vimrc文件的配置

   若当前目录未加入.ycm_extra_conf.py文件,则需要在vimrc文件中添加一行let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py,此即为.ycm_extra_conf.py文件的默认路径,也可自行指定。vimrc文件中对YCM的配置适用于所有文件夹,如下:

//设置.ycm_extra_conf.py的默认索引路径(必须)
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py'

//设置YCM语义补全自动触发条件(必须)                                                                                                    
let g:ycm_semantic_triggers =  {                                                                                                       
\   'c' : ['->', '.', ' ', '(', '[', '&'],                                                                                           
\   'objc' : ['->', '.', 're!\[[_a-zA-Z]+\w*\s', 're!^\s*[^\W\d]\w*\s',                                                              
\             're!\[.*\]\s'],                                                                                                      
\   'ocaml' : ['.', '#'],                                                                                                            
\   'cpp,objcpp' : ['->', '.', '::'],                                                                                               
\   'perl' : ['->'],                                                                                                              
\   'php' : ['->', '::'],                                                                                                            
\   'cs,java,javascript,typescript,d,python,perl6,scala,vb,elixir,go' : ['.'],                                                       
\   'ruby' : ['.', '::'],                                                                                                           
\   'lua' : ['.', ':'],                                                                                                            
\   'erlang' : [':'],  

//一些ycm在vimrc中的常用配置,可参照官方教程的Functions部分自行配置(非必须)
//支持关键字补全
let g:ycm_seed_identifiers_with_syntax=1 
//支持从Tag files收集关键字                                                                                              
let g:ycm_collect_identifiers_from_tags_files = 1   
//支持注释补全                                                                                   
let g:ycm_complete_in_comments = 1         
//支持文件名补全                                                                                        
let g:ycm_complete_in_strings = 1 

//设置括号自动匹配,可根据需要自行添加(非必须)
inoremap ( ()<LEFT>
inoremap ( ()<LEFT>
inoremap ( ()<LEFT>
  1. .ycm_extra_conf.py 文件的修改

   完成vimrc文件的修改后,还需要在.ycm_extra_conf.py文件中进行最后的配置。打开.ycm_extra_conf.py文件,该配置文件的核心就是修改flags变量。告诉系统库文件所在,以及在遇到何种后缀时会发生补全。运行以下命令:
echo | clang -v -E -x c++ -
将输出结果中
#include "..." search starts here:
#include <...> search starts here:

End of search list.z
之间的内容添加到flags变量中的-isystem后。这里参考了这篇博客的内容,感谢。同时在flag变量中添加'c',以及将flags.append('-std=c++11')替换为flags.append('-std=c99')。若本工程还依赖其他的库文件,也需要加进来,我加入了dpdk的库文件。最后的.ycm_extra_conf.py文件配置结果如图:
flag变量添加'c'flag变量插入include文件位置、依赖的库文件以及替换flags.append()内容

5.最后

   至此,YCM算是正式安装完成了。附上我现在的代码补全效果图,以上所有环节缺一不可,不愧是史上最难安装插件。而且我的YCM目前也只是最基本的配置,更多个性化的配置,就留到以后再探索吧。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值