YouCompleteMe实现vim自动补全

来源:互联网 发布:阿里云oss收费标准 编辑:程序博客网 时间:2024/06/15 23:45

之前用的是OmniCppComplete +ctags补全,但是这种方法最大的缺点是对于自己写的类,要想智能补全就必须先生成一遍ctags索引文件,不光影响效率还特别麻烦,所以一直很不满意,也基本没用过它的补全功能。前两天经小组王博同学提示,找到了这个YouCompleteMe插件。配的过程麻烦了点,但是很不错的解决了之前那个问题,让vim也实现了IDE式的补全。

1.准备条件
(1)最新版的Vim(7.3.584+),须支持python。
终端输入命令:vim –version 或 打开vim用命令:version 查看版本信息,若python前有‘+’即可。
然后终端执行命令:

sudo apt-get install python-dev

装的过程中若遇到问题,依次执行以下命令:

sudo apt-get update
sudo apt-get install -f

之后重试安装:

sudo apt-get install python-dev

(2)安装cmake
ubuntu下命令:sudo apt-get install cmake
(3)安装clang
ubuntu下命令:sudo apt-get install clang
或者跳过这步,后面编译YCM时,如果没有clang会自动安装。
(4)安装Vundle
这个是用来管理vim插件的,安装和卸载都特别方便,各个插件是一个文件夹,放在目录bunble下。
这里写图片描述
2.安装vundle
(1)

$:git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

(‘$’均表示命令提示符)
(2)在 .vimrc 的文件起始处,插入以下内容并保存:

set nocompatible              " be iMprovedset rtp+=~/.vim/bundle/vundle/call vundle#rc()" let Vundle manage Vundle" required!Bundle 'scrooloose/syntastic'Bundle 'gmarik/vundle'" My bundles here:"" original repos on GitHubBundle 'tpope/vim-fugitive'Bundle 'Lokaltog/vim-easymotion'Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}Bundle 'tpope/vim-rails.git'" vim-scripts reposBundle 'L9'Bundle 'FuzzyFinder'" non-GitHub reposBundle 'git://git.wincent.com/command-t.git'" Git repos on your local machine (i.e. when working on your own plugin)Bundle 'file:///Users/gmarik/path/to/plugin'" ...Bundle 'Valloric/YouCompleteMe'filetype plugin indent on     " required!

注:Bundle ‘插件名或git链接’ 表示要安装的插件
(3)再次打开vim,在命令行模式中执行:BundleInstall
这里写图片描述
进入安装插件过程:
这里写图片描述
Plugin前面有‘>’表示该插件正在安装,YoucompleteMe插件安装的时间比较长,耐心等待,不要退出,最后会提示有一个错误,这是正常的,因为ycm需要手工编译出库文件,就像上图中的‘!’,忽略它。
注:若要卸载插件,只需将.vimrc中 “Bundle ‘插件’ ”这条语句删掉,然后在vim 命令行模式中执行:BundleClean即可。
3.编译YouCompleteMe
(1)

$ cd   ~/.vim/bundle/YouCompleteMe/

这里写图片描述

$ ./install.sh  --clang-completer

参数–clang-completer是为了支持C/C++的补全,不需要可以不加。
编译过程比较长,耐心等待。
(2)找到配置文件 .ycm_extra_conf.py
网上大多说这个文件在YouCompleteMe/cpp/ycm下面,但是YouCompleteMe下面就没有cpp文件夹,其实它是在third_party/ycmd/cpp/ycm目录下。

$ cd  ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/

ls -a 即可看到。
(3)自行在YoucompleteMe/中创建cpp/ycm目录,将 .ycm_extra_conf.py拷贝进去

$ cd  ~/.vim/bundle/YouCompleteMe
$ mkdir  cpp
$ mkdir  cpp/ycm
$ cp third_party/ycmd/cpp/ycm/.ycm_extra_conf.py  cpp/ycm/

4.修改.vimrc配置文件
将下面的内容添加到.vimrc里面

" 寻找全局配置文件let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py'" 禁用syntastic来对python检查let g:syntastic_ignore_files=[".*\.py$"] " 使用ctags生成的tags文件let g:ycm_collect_identifiers_from_tag_files = 1" 开启语义补全" 修改对C语言的补全快捷键,默认是CTRL+space,修改为ALT+;未测出效果"let g:ycm_key_invoke_completion = '<M-;>'" 设置转到定义处的快捷键为ALT+G,未测出效果"nmap <M-g> :YcmCompleter GoToDefinitionElseDeclaration <C-R>=expand("<cword>")<CR><CR> "关键字补全"let g:ycm_seed_identifiers_with_syntax = 1" 在接受补全后不分裂出一个窗口显示接受的项set completeopt-=preview" 让补全行为与一般的IDE一致set completeopt=longest,menu" 不显示开启vim时检查ycm_extra_conf文件的信息let g:ycm_confirm_extra_conf=0" 每次重新生成匹配项,禁止缓存匹配项let g:ycm_cache_omnifunc=0" 在注释中也可以补全let g:ycm_complete_in_comments=1" 输入第一个字符就开始补全let g:ycm_min_num_of_chars_for_completion=1" 错误标识符let g:ycm_error_symbol='>>'" 警告标识符let g:ycm_warning_symbol='>*'" 不查询ultisnips提供的代码模板补全,如果需要,设置成1即可" let g:ycm_use_ultisnips_completer=0"

上面的内容中,除了第一句寻找全局配置文件,其他的语句可以根据自己的需要更改、删除或添加。
注:如果没有在第(3)步中自己创建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'

5.保存退出.vimrc ,打开一个C/C++源程序,体验其自动补全效果。
这里写图片描述
还可以对C++的STL库智能补全:
这里写图片描述

6.
(1)配合上面安装的syntastic还可以语法检测
这里写图片描述
‘>>’指出有语法错误,但是检测速度太慢,没什么大用。

自我感觉这个语法自动检测很烦,可以禁用它:
进入 /bundle/YouCompleteMe/plugin
修改youcompleteme.vim中的:
这里写图片描述
将如上图中的第141行的参数改为0就可以了。
(2)YcmDiags插件可以显示错误或警告信息,可以设置F9为打开窗口的快捷键,在.vimrc中添加语句:
这里写图片描述
显示效果:
这里写图片描述

7.添加头文件
目前在include中,无法补全stdio.h等头文件,我们需要将/usr/include添加进去。路径添加到 ~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py 文件中的flags 数组中,每增加一个路径,前面要写’-isystem’。
这里写图片描述

以后需要boost库等其他的补全,也需要将相应的路径添加进去。

-.YoucompleteMe还有很多强大的功能,有兴趣可以继续探索。

1 0
原创粉丝点击