vim自动补全插件YouCompleteMe

时间:2022-12-12 17:22:43

前言

Valloric/YouCompleteMe可以说是vim安装最复杂的插件之一,但是一旦装好,却又是非常好用的。YouCompleteMe简称ycm

在安装折腾的过程中,我再一次的体会到,除了官网教程,百度上的教程都是辣鸡,都是坑!

 

安装准备:

1.确保已经安装好build-essential 和 cmake 。ycm是编译型补全插件,这两个工具是编译ycm用的。

sudo apt-get install build-essential cmake

2.确保已经安装好了python-dev 和 python3-dev

sudo apt-get install python-dev python3-dev

3.下载ycm

我们使用vundle插件下载ycm。vundle是管理vim插件的vim插件,安装很简单,安装vundle的教程另附了,大家也可以自行上网搜索。

在vimrc里增加如下语句,让ycm添加到vundle的管理列表中:

Bundle 'Valloric/YouCompleteMe'
Bunlde 'SirVer/ultisnips'
Bundle 'honza/vim-snippets'

注意!!这里有2个天坑, 'SirVer/ultisnips' 和 'honza/vim-snippets' 这两个插件在ycm安装文档中没有说明的!我是去了ultisnips的git上才看到。如果不安装,就会在进入vim的时候报OnBufferRead的错!

 

然后在vim里执行,下载并安装列表中的插件。当然了,这里包含了我们刚增加的ycm。这个过程比较漫长,可以需要十来分钟,耐心等待吧。

:BundleInstall

4.编译ycm

上面的步骤只是把ycm下载下来了,但是还没有编译。使用如下命令编译ycm。以下的例子,只添加对C++补全的支持。

cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer

 对其他语言的支持有,大家可以按需求添加。如果想全部语言都安装,可以使用./install.py --all

C# support: install Mono and add --omnisharp-completer 
Go support: install Go and add --gocode-completer 
TypeScript support: install Node.js and npm then install the TypeScript SDK with npm install -g typescript.
JavaScript support: install Node.js and npm and add --tern-completer 
Rust support: install Rust and add --racer-completer

5.配置工程

如果上面顺利的话,你已经完成了ycm的安装。最后在vimrc中添加如下快捷键方便使用。

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
" If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"

 

对于每一个工程,我们可以自定义.ycm_extra_conf.py ,这个文件可以定义自动补全的各种细节,例如搜索什么目录等等,都可以在里面进行设置。

ycm是依赖clang实现补全的,如果需要c++补全,需要在.ycm_exrea_conf.py文件中添加响应的c++文件路径。

c++文件路径详情可以通过以下命令查询

echo |clang -std=c++11 -stdlib=libc++ -v -E -x c++ -

以下是在.ycm_exrea_conf.py添加内容的例子

'-isystem','/usr/local/include',

'-isystem','/usr/lib/gcc/x86_64-linux-gnu/4.8/include',

'-isystem','usr/include/x86_64-linux-gnu',

'-isystem','usr/include',