Ubuntu Vim 安装 YouCompleteMe

根据官方的完全安装指南http://valloric.github.io/YouCompleteMe/#full-installation-guide从头开始,不是用./install.py --clang-completer的简易安装方式。

第一步,是最重要的地方,Vim必须支持Python,而且版本最好高于7.4 ,如果不行需要源码编译Vim,使它支持Python ,重新编译Vim不影响已安装的YCM。

第二步,通过Vundle安装YCM,到https://github.com/VundleVim/Vundle.vim查看说明。

执行git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim ,

修改.vimrc ,添加以下内容

set nocompatible              " be iMproved, required

filetype off                  " required

" set the runtime path to include Vundle and initialize

set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" let Vundle manage Vundle, required

Plugin 'VundleVim/Vundle.vim'

Plugin 'Valloric/YouCompleteMe'

call vundle#end()            " required

filetype plugin indent on    " required

Launch vim and run :PluginInstall ,等待完成。

在等待的时候,进到第三步。(这一步结束的时候,到~/.vim/bundle/YouCompleteMe检查完整性git submodule update --init --recursive ,继续下载YCM必需的文件。

打开Vim时提示YouCompleteMe unavailable: requires Vim 7.4.1578+. 。

安装更高版本Vim8.0 ,执行./configure --enable-pythoninterp=yes --with-python-config-dir=/usr/lib/python2.7/config-i386-linux-gnu/ --with-features=huge

安装完成,再次打开就没有错误提示了,因为不该有错误了。)

第三步,到http://releases.llvm.org/download.html下载四个文件,本文是下载源码,源码编译对机器的要求很高(默认编译Debug模式,吃内存,改为Release即可),可能出现如下的错误

[ 65%] Built target LTO_exports
[ 65%] Linking CXX shared library ../../lib/libLTO.so
collect2: fatal error: ld terminated with signal 9 [Killed]
compilation terminated.
tools/lto/CMakeFiles/LTO.dir/build.make:279: recipe for target 'lib/libLTO.so.5.0.0' failed

原因是系统内存不够,可到http://blog.csdn.net/lands92/article/details/51554455了解,解决办法参考https://stackoverflow.com/questions/25197570/llvm-clang-compile-error-with-memory-exhausted ,选择Release编译,不编译Debug 。

官方建议使用编译好的二进制文件,本文同样建议这么做,不过源码编译也是可以的,注意下载的libclang需为3.9以上版本,文件名类似clang+llvm-5.0.0-linux-x86_64-ubuntu16.04.tar.xz 。


到http://clang.llvm.org/get_started.html查看说明。

打开一个新终端(如果安装了tmux等会话管理工具,就很方便了),解压文件,以Clang的源码为例

tar xvf cfe-5.0.0.src.tar.xz

mv cfe-5.0.0.src clang

cp -r clang llvm/tools/

确保四个文件夹都在正确的目录,在llvm同级目录下执行以下命令

mkdir build

cd build

cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ../llvm

make

make install

等待一段时间,等第二步和第三步都完成,才能进到第四步。

第四步,安装ycm_core库。

cd ~

mkdir ycm_build

cd ycm_build

cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/usr/local/lib/libclang.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp (安装编译好的二进制文件是另一种写法,请自行参考YCM官方指南)

这条命令的最后一条结果,如果是Build files have been written to: ~/ycm_build ,在当前目录执行下一条命令,否则转到给出的目录执行下一条命令。

cmake --build . --target ycm_core

YCM的安装就完成了,build目录和ycm_build都可以删除了。

然后就是User Guide部分了,参考http://valloric.github.io/YouCompleteMe/#user-guide 。

这个时候,在~/.vim/bundle/YouCompleteMe/third_party/ycmd目录下面应该有libclang.so.5和ycm_core.so两个库文件,该目录下面的cpp目录下的ycm目录有个.ycm_extra_conf.py文件,该文件154行左右的一段话删掉或注释掉。然后添加

'-isystem',

‘/usr/include’,

'-isystem',

‘/usr/local/include’,

'-isystem',

‘/usr/include/c++/5.4.0’,

'-isystem',

‘/usr/local/include/i386-linux-gnu’

执行echo | clang -v -E -x c++ - ,把#include <...> search starts here:下面显示的目录以同样方式加进来。其实加不加这些都行,只要保证上面的加进来就可以了。

然后在.vimrc添加

let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

这个时候可以补全头文件了,类和结构体的成员也能自动补全了。

这时tab键用来选择补全,添加

let g:ycm_key_list_select_completion = ['<Down>']

let g:ycm_key_list_previous_completion = ['<Up>']

nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>

nnoremap <F12> :YcmDiags<CR>

inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"

就可以用上下键选择补全,enter键选中当前项,F5在非Insert模式下查看是否有语法错误,F12在Vim窗口底部显示错误信息。

然后就是Options部分,参考http://valloric.github.io/YouCompleteMe/#options 。

let g:ycm_min_num_of_chars_for_completion = 2

let g:ycm_min_num_identifier_candidate_chars = 0

let g:ycm_auto_trigger = 1

let g:ycm_show_diagnostics_ui = 1

let g:ycm_complete_in_comments = 1

let g:ycm_complete_in_strings = 1

let g:ycm_collect_identifiers_from_comments_and_strings = 1

let g:ycm_seed_identifiers_with_syntax = 1

let g:ycm_add_preview_to_completeopt = 1

let g:ycm_autoclose_preview_window_after_completion = 1

let g:ycm_autoclose_preview_window_after_insertion = 1

let g:ycm_key_invoke_completion='<TAB>'

let g:ycm_confirm_extra_conf = 1

let g:ycm_semantic_triggers =  {
  \   'c' : ['->', '.'],
  \   'cpp' : ['->', '.', '::'],
  \ }

使用的时候如果需要补全函数,敲出开头的两个字母,然后tab键补全,就可以进行选择了;如果想查看函数原型,移动光标到该函数位置,tab键就能看到了;如果是头文件,会自动补全。当加入新的头文件时,需要F5一下,才能补全该头文件下的函数。

如果想了解多一些,推荐以下文章,都是详细完整的指导。

VIM、YouCompleteMe折腾配置以及clang+llvm编译安装 - 简书

http://www.jianshu.com/p/c24f919097b3

一步一步带你安装史上最难安装的 vim 插件 —— YouCompleteMe - 简书

http://www.jianshu.com/p/d908ce81017a

为VIM安装YouCompleteMe插件 - 轩宇沙 - 博客园

http://www.cnblogs.com/guanfeng/p/6837710.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值