vim插件配置2--YouCompleteMe
自动补全插件 YouCompleteMe 简介
YouCompleteMe是一种代码自动补全插件. 代码补全功能在Vim发展史上是一个比较弱的功能, 因此一直被使用Source Insight的人诟病. 早些年出现的自动补全插件如 AutoComplPop, Omnicppcomplete, Neocomplcache等在效率上低得惊人, 特别是把整个Linux内核代码添加到工程时, 要使用这些代码补全功能, 每次都需要等待1~2分钟的时间, 简直让人抓狂.
插件是最近几年才出现的新插件, 它利用clang为C/C++代码提供代码提示和补全功能. 借助clang的强大功能, YouCompleteMe的补全效率和准确率极高, 可以和Source Insight一比高下. 因此, Linux开发人员在Vim配备了YouCompleteMe插件之后完全可以抛弃Source Insight.
在安装YouCompleteMe插件之前, 需要保证Vim的版本必须高于7.4.1578, 并且支持Python2或者Python3
检查vim的版本
[me@fedora ~]$ vim --version VIM - Vi IMproved 8.1 (2018 May 18, compiled Aug 13 2018 13:12:53) Included patches: 1-279 Modified by <bugzilla@redhat.com> ... #省略很多输出...
在~/.vimrc中添加YouCompleteMe
这里的例子中, 用的是vim-plug插件 (见 )
Plug ycm-core/YouCompleteMe
然后重启vim, 并输入命令 “:PlugInstall” 来完成安装, 这个过程会从网络下载代码, 而且YouCompleteMe代码很大, 而境外的github有比较慢, 因此下载可能会持续很长时间.
编译YouCompleteMe
插件安装完成之后, 需要重新编译它, 在编译前需要保证已经安装了如下编译工具包:
$ sudo apt-get install build-essential cmake python-dev python3-dev
接下来进入YouCompleteMe插件代码的编译
[me@fedora ~]$ cd ~/.vim/plugged/YouCompleteMe/ [me@fedora YouCompleteMe]$ ./install.py --clang-completer # --clang-completer表示对C/C++的支持
编译后的配置
编译完成之后, 还需要做一些配置工作. 首先, 把文件 ~/.vim/plugged/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py 拷贝到 ~/.vim 目录下
[me@fedora YouCompleteMe]$ cp ~/.vim/plugged/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/
然后, 在~/.vimrc中做些YouCompleteMe的设置:
其中, 这两个比较关键:
let g:ycm_server_python_interpreter = /usr/bin/python3 let g:ycm_global_ycm_extra_conf = ~/.vim/.ycm_extra_conf.py
我自己这的配置如下:
"YouCompleteMe { let g:ycm_server_python_interpreter = /usr/bin/python3 let g:ycm_global_ycm_extra_conf = ~/.vim/.ycm_extra_conf.py let g:ycm_auto_trigger = 0 "default is 1 "let g:ycm_min_num_of_chars_for_completion = 2 "default is 2 "let g:ycm_key_invoke_completion = <C-Space> "default is <C-Space> "let g:ycm_key_list_stop_completion = [<C-y>] "default is <C-y> "let g:ycm_key_list_select_completion = [<TAB>, <Down>] "default is <TAB>, <Down> "let g:ycm_key_list_previous_completion = [<S-TAB>, <Up>] "default is <S-TAB>, <Up> let g:ycm_show_diagnostics_ui = 0 "default is 1 "} "
参考
本文很大部分是摘抄了 <<奔跑吧 Linux内核 入门篇>> 的相关章节.