Fedora25下vim智能补全插件YouCompleteMe安装
2016-11-28 22:27
351 查看
一、安装前须知
YCM是vim的一款基于语义的智能补全插件。该插件的功能与以下插件相冲突:clang_complete
AutoComplPop
Supertab
neocomplcache
虽然可以补全很多种编程语言,但YCM主要还是针对c++的,此外它对python的支持也不错。
作为一个c++程序员,要想尽可能地发挥YCM的功能,推荐安装以下软件:
vim (尽量新的版本,至少 >= 4.3.7,截至 2013-10-27)
git (作为vundle插件的支持)
vim 插件 Vundle (参考:https://github.com/gmarik/vundle)
vim 插件 syntastic 与 ListToggle
CMake (>=2.8) (为c++项目生成 compile database)
pylint (高级python语法检查支持)
如果你的软件源中的vim版本不够高,那么很有可能你需要从源码安装vim,参考这里:
ftp://ftp.vim.org/pub/vim/unix/
二、安装Vundle
Vundle的安装:Vundle是vim的一款进行插件管理的插件。它需要git的支持,git可以在各发行版软件源内找到并安装。除了安装时的一个命令,日常vundle的使用并不需要了解git命令。
以下安装流程参考自vundle的github简介。
使用git下载vundle
运行命令:
$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
这样插件将被下载到 ~/.vim/bundle/vundle
编辑.vimrc
在.vimrc末尾添加以下内容:
""""""""""""""""""""" Vundle set nocompatible filetype off set rtp+=~/.vim/bundle/vundle call vundle#rc() Bundle 'gmarik/vundle' Bundle 'Valloric/YouCompleteMe' Bundle 'Valloric/ListToggle' Bundle 'scrooloose/syntastic' filetype plugin indent on """"""""""""""""""""" Vundle
关键的是其中以Bundle开头的行,每一个Bundle代表一个vim插件,这些省略完整URL插件都是托管在https://github.com上的。如果想要安装新的插件,在“call vundle#rc()” 和 ”filetype plugin indent on”之间添加新的Bundle ‘插件名称’即可。
编辑完成后,在vim下运行下面的命令进行插件安装,请确保你的网络连接正常。
在末行模式输入
:source ~/.vimrc :BundleInstall
命令进行安装。
此时,安装过程是看不到你安装进度。所以用以下命令
$ watch -n 2 du -lh ~.vim/bundle
每两秒对目录及文件大小进行观察,会发现慢慢增大,可粗略查看安装进度。
安装流程比较缓慢,请耐心等待。
如果安装成功,你将看到Done!的提示字样。在本例中,插件:YouCompleteMe, syntastic和ListToggle被安装进你的vim中。
三、YCM语法补全模块的编译
YCM语法补全模块的编译。为了让YCM实现语法补全,还需要编译语法补全模块和编辑一个配置文件。
在终端下执行以下命令:
$HOME/.vim/bundle/YouCompleteMe
并执行 install.sh –clang-completer
即可安装语法补全模块。
如果出现问题如下:
In file included from /home/king/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/BoostParts/boost/python/detail/prefix.hpp:13:0, from /home/king/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/BoostParts/boost/python/handle.hpp:8, from /home/king/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/BoostParts/boost/python/converter/arg_to_python_base.hpp:7, from /home/king/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/BoostParts/libs/python/src/converter/arg_to_python_base.cpp:6: /home/king/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/BoostParts/boost/python/detail/wrap_python.hpp:50:23: 致命错误:pyconfig.h:No such file or directory # include <pyconfig.h> ^ 编译中断。 BoostParts/CMakeFiles/BoostParts.dir/build.make:494: recipe for target 'BoostParts/CMakeFiles/BoostParts.dir/libs/python/src/converter/arg_to_python_base.cpp.o' failed gmake[3]: *** [BoostParts/CMakeFiles/BoostParts.dir/libs/python/src/converter/arg_to_python_base.cpp.o] Error 1 gmake[3]: *** 正在等待未完成的任务.... CMakeFiles/Makefile2:85: recipe for target 'BoostParts/CMakeFiles/BoostParts.dir/all' failed gmake[2]: *** [BoostParts/CMakeFiles/BoostParts.dir/all] Error 2 CMakeFiles/Makefile2:154: recipe for target 'ycm/CMakeFiles/ycm_core.dir/rule' failed gmake[1]: *** [ycm/CMakeFiles/ycm_core.dir/rule] Error 2 Makefile:131: recipe for target 'ycm_core' failed gmake: *** [ycm_core] Error 2 ERROR: the build failed. NOTE: it is *highly* unlikely that this is a bug but rather that this is a problem with the configuration of your system or a missing dependency. Please carefully read CONTRIBUTING.md and if you're sure that it is a bug, please raise an issue on the issue tracker, including the entire output of this script and the invocation line used to run it.
出现缺少pyconfig.h文件,我百度过后找到解决方案如下:
下载python-devel
$ sudo yum install python-devel
继续执行命令:
$HOME/.vim/bundle/YouCompleteMe
即可。
四、配置文件 .ycm_extra_conf.py
这个文件(.ycm_extra_conf.py)决定了YCM在进行c系语言(c,c++,etc.) 语法补全时的行为。默认的样板配置文件在$HOME/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py
对于YCM来说,当打开一个代码文件时,插件将顺着文件所在的路径一直向上查找,如果搜索到第一个配置文件将立刻读入。如果一直搜索到根目录依旧无法找到配置文件,语法补全将不被启用。由此可知,文件所在目录的配置文件优先级最高,根目录的优先级最低。
一种比较好的使用方法是在每个项目中创建一个配置文件,或者将项目根据语言进行分类,在每个语言文件夹下建立一个配置文件。
默认配置文件是支持c++的,但是需要修改一处地方。可以将该文件拷贝出来并编辑:
$ cp $HOME/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~ vim ~/.ycm_extra_conf.py
找到以下内容:
# NOTE: This is just for YouCompleteMe; it's highly likely that your project # does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR # ycm_extra_conf IF YOU'RE NOT 100% YOU NEED IT. try: final_flags.remove( '-stdlib=libc++' ) except ValueError: pass
将之删除后YCM才会补全c++标准库的内容。
这样,一个最小能用的配置文件就出炉了。
五、YCM变量配置
在日常使用中,有一些建议修改的变量。本人的.vimrc中对YCM的配置如下:" YouCompleteMe nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> "let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py' "Do not ask when starting vim let g:ycm_confirm_extra_conf = 0 let g:syntastic_always_populate_loc_list = 1
其中,g:ycm_global_ycm_extra_conf 定义了全局配置文件,对于懒人来说是个好用的功能。当YCM在向上搜索的路径中找不到配置文件后,YCM将导入全局配置文件。
g:ycm_confirm_extra_conf 决定了在导入配置时是否需要手动确认。设置为0后YCM就不会老是在启动vim的时候来烦你了。
本示例中安装了syntastic插件进行语法检查,因此g:syntastic_always_populate_loc_list设置为1将更方便地使用其功能。又因为本示例安装了ListToggle,打开错误/警告提示面板将变成简单的一个快捷键。
在vim中,
<leader>键可以自由设置,一般来说它是逗号”,”
进行至此,可用的快捷键如下:
<leader>jd跳转到当前函数的定义或声明。
F5 刷新错误/警告。(其实没什么用,每次保存时候都会自动刷新的)
<leader>l打开错误/警告提示面板
<leader>q打开quickfix窗口
主动调用语义补全的按键默认是
<c-space>,可以通过修改变量g:ycm_key_invoke_completion来设置。
2、我在网上找到的.vimrc配置:
在.vimrc文件末尾加上:
" 自动补全配置 set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228) autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口 inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "回车即选中当前项 "上下左右键的行为 会显示其他信息 inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>" inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>" inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>" inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>" "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_collect_identifiers_from_tags_files=1 " 开启 YCM 基于标签引擎 let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项 let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都重新生成匹配项 let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全 nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> "force recomile with syntastic "nnoremap <leader>lo :lopen<CR> "open locationlist "nnoremap <leader>lc :lclose<CR> "close locationlist inoremap <leader><leader> <C-x><C-o> "在注释输入中也能补全 let g:ycm_complete_in_comments = 1 "在字符串输入中也能补全 let g:ycm_complete_in_strings = 1 "注释和字符串中的文字也会被收入补全 let g:ycm_collect_identifiers_from_comments_and_strings = 0 nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处
可以更加完善代码补全功能。
六、vim编辑时候出现的错误
1、如果出现以下错误:YouCompleteMe unavailable: requires Vim compiled with Python (2.6+ or 3.3+) support
证明该vim版本并不支持python,用以下命令确认
$ vim --version | grep "python"
结果显示
+cryptv +linebreak -python +vreplace +cscope +lispindent -python3 +wildignore
表示该vim版本不支持python,-号表示不支持,+号表示支持。
在此网址下载vim源码编译安装即可
ftp://ftp.vim.org/pub/vim/unix/
2、如果还出现一种没有cmake的错误,在yum仓库cmake下载即可:
$ sudo yum install cmake
===========原文转载自贴吧=============
贴子网址:http://tieba.baidu.com/p/2672605209?see_lz=1#40874659085l
相关文章推荐
- 自写vim插件ldoc.vim,提供智能的lua注释代码补全
- 【vim】插件管理及代码智能提示与补全环境的配置
- fedora 20下安装vim的C++补全插件clang_complete
- Vim智能补全插件YouCompleteMe安装
- 【vim】插件管理及代码智能提示与补全环境的配置
- fedora 20下安装vim的C++补全插件clang_complete
- vim补全插件YouCompleteMe安装
- Vim智能补全插件YouCompleteMe安装
- vim c/c++智能补全插件
- 在CentOS 6.6 64bit上安装vim智能补全插件YouCompleteMe
- 自写vim插件ldoc.vim,提供智能的lua注释代码补全
- VIM python 自动补全插件:pydiction
- Vimer的福音 新时代的Vim C++自动补全插件 clang_complete
- Vim代码补全插件——YouCompleteMe安装说明
- vim 智能补全 clang_complete
- vim安装youcompleteme自动补全插件
- vi/vim使用进阶: 智能补全
- [vim]clang带来的clang complete代码补全插件
- vim:隆重推荐括号补全插件--auto-pairs
- 【环境配置】VIM 安装YouCompleteMe自动补全插件(MAC)