YouCompleteMe 是一个需要编译的插件,安装比较麻烦, 故做个记录.

参考文档:

http://blog.csdn.net/leaf5022/article/details/21290509

安装环境:

Ubuntu14.04 32bit.

VIM7.4, Vim版本至少为 7.3.584 with python2 support, 支持python 2.6以上, Vim可以通过命令 vim --version 查询, 前面带有 "+", 说明支持.  

参考官方描述, https://github.com/Valloric/YouCompleteMe#ubuntu-linux-x64-super-quick-installation. 

PS. 64bit 系统的安装方法见官方介绍的快速安装方法.

 

一. 准备工作, 安装基础插件.

sudo apt-get install build-essential    基本编译环境.

sudo apt-get install python-dev      Python头文件

sudo apt-get install cmake        cmake 制作makefile

 

二. 下载 YouCompleteMe.

通过vundle安装, 这是vim插件管理工具, 详见 https://github.com/gmarik/Vundle.vim#about.

1. 下载vundle, git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim.

2. 配置 ~/.vimrc

set nocompatible

filetype off                 " required
set rtp+=~/.vim/bundle/Vundle.vim    " set the runtime path to include Vundle and initialize
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
" 安装什么插件就写在下面, 如果插件来自github, 写法如下,只要作者名/项目名就行了 

Plugin 'gmarik/Vundle.vim'
Bundle 'Valloric/YouCompleteMe'     
Bundle 'scrooloose/syntastic'     " 语法检查插件 
Bundle 'jiangmiao/auto-pairs'

 

3. 配置完成后进入 vim, 运行 :PluginInstall, 下载插件(处理 YouCompleteMe时需要多等一会),下载完成后在 ~/.vim/bundle/ 目录下. 

 

三. 编译安装 YouCompleteMe

1. 生成 libclang.so.

为了对C语言语义支持,需要安装生成makefile 需要的 libclang.so(3.2+), gitHub上也只提供了Ubuntu 64位版本的二进制包, 所以只好自己编译.

Clang是一个开源编译器, 能够编译C/C++/Objective-C++. Clang提供的libclang库是用于驱动YCM对这些语言的语义支持. YCM需要版本至少为3.4的libclang,

1). 源码安装, 手动下载 Clang 和 llvm 的源码, 详细过程见http://www.cnblogs.com/freedreamnight/p/3879146.html.

PS. 源码在编译的过程中会遇到各种意想不到的错误, 即使生成了libclang.so, 在后面制作makefile 编译YouCompleteMe 时还是出现了类似 "libclang.so/include" 不是一个路径的错误. 
所以后来放弃了, 使用第二种办法.

 

 

 

 2). 系统安装, 直接通过源安装 Clang 和 llvm, 这里用的均为V3.4.

 

2. 制作makefile.

建立目录 /home/hongssun/Documents/YCM_build.

PS. 如果不需要C语言的语义支持:在YCM_build目录下执行

cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

1). 如果 Clang 和 llvm 是按照上述中的1)方法手动编译, 则在YCM_build目录下执行

cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/path to libclang.so ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

PS. DEXTERNAL_LIBCLANG_PATH = libclang.so 的路径.

 

2). 我是按照上述2)的办法,  则在YCM_build目录下执行

cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

 

生成makefile过程中遇到如下错误, 解决办法见 https://github.com/Valloric/YouCompleteMe/issues/28, 

cd /usr/lib/llvm-3.4/lib/ && sudo ln -s libclang.so.1 libclang.so

前面安装clang的某个版本, 但是没有将其设为系统默认的版本, 所以才会出现找不到libclang.so的错误.

 

3. 编译 YouCompleteMe

YCM_build 目录下执行 make ycm_support_libs

编译过程中出现了权限错误, 所以应使用 sudo 执行.

 

编译完成如下图.

 

最后在使用补全的时候出现了"ycmd server SHUT DOWN"的错误, 解决办法见 https://github.com/Valloric/YouCompleteMe/issues/870,

在 .vimrc 中增加 let g:ycm_path_to_python_interpreter = '/usr/bin/python'

 

PS. 

由于YouCompleteMe对( )的自动补全, 导致插件 showfunc.vim "当输入 ( 时, 会自动匹配tags, 显示函数的定义原型"功能无法实现,

解决办法是修改 showfunc.vim 如下, 即输入模式下当手动输入( )时, showfunc.vim 将其当作快捷键改为 ( 而现实函数原型显示. 

 

添加在Ubuntu 14.04 64bit安装过程:

1. 根据官方指示安装基本插件

sudo apt-get install build-essential cmake

sudo apt-get install python-dev

2. 下载 YoucompleteMe, 进入目录

cd ~/.vim/bundle/YouCompleteMe
./install.sh --clang-completer      // 用Clang编译, 支持C语言族.

  结果很顺利, 但是使用时发现只能补全函数名,不能补全参数等.

3. 修改配置文件, 增加对.c, .cpp 文件的补全(前面在 32bit上的安装也得配置), 官方的配置为:

  let g:ycm_semantic_triggers = {

    \ 'c' : ['->', '.'],
    \ 'objc' : ['->', '.'],
    \ 'ocaml' : ['.', '#'],
    \ 'cpp,objcpp' : ['->', '.', '::'],
    \ 'perl' : ['->'],
    \ 'php' : ['->', '::'],
    \ 'cs,java,javascript,d,python,perl6,scala,vb,elixir,go' : ['.'],
    \ 'vim' : ['re![_a-zA-Z]+[_\w]*\.'],
    \ 'ruby' : ['.', '::'],
    \ 'lua' : ['.', ':'],
    \ 'erlang' : [':'],
    \ }

  增加.c, .cpp 文件'[', '(', '&'的补全, 修改为:(参考 https://github.com/iSpeller/Profile/blob/master/vim/.vimrc --- line 170)

  let g:ycm_semantic_triggers = {
    \ 'c' : ['->', '.', ' ', '(', '[', '&'],
    \ 'cpp,objcpp' : ['->', '.', ' ', '(', '[', '&', '::'],
    \ 'perl' : ['->', '::', ' '],
    \ 'php' : ['->', '::', '.'],
    \ 'cs,java,javascript,d,vim,python,perl6,scala,vb,elixir,go' : ['.'],
    \ 'ruby' : ['.', '::'],
    \ 'lua' : ['.', ':']
    \ }

  但是发现还是不能补全.

此时, 还无法补全只能有两个怀疑点:

a. 配置脚本文件没有生效,  let g:ycm_global_ycm_extra_conf 指向的脚本没有生效. 

b. 编译时Clang的版本问题.

确定配置文件没问题之后, 只能是Clang的问题了.

 

4. 在 Vim 运行:YcmDebugInfo 命令, 提示 Clang Server 是False状态.

Printing YouCompleteMe debug information...
-- Server has Clang support compiled in: False
-- Server running at: http://localhost:53299
-- Server process ID: 16226

使用命令:YcmRestartServer 等了好久还是显示restarting, 就是Clang的问题了, 于是采用系统Clang库编译试试.

PS. 另外一种验证Clang有没有生效的方法:https://github.com/Valloric/YouCompleteMe/issues/1155

1). 安装最新的 Clang & LLVM.

2). 进YouCompleteMe目录, 使用命令:

./install.sh --clang-completer --system-libclang

编译过程中, 遇到了前面“生成makefile过程中”同样的错误, 用同样的方法解决. 也就是说默认下即使安装了最新的Clang, 但是系统并没有把他作为默认的Clang,重新编译YCM的时候还是没生效.

3). 重新使用原来的支持C语言的命令重新编译YCM, 完成后函数参数补全OK.

./install.sh --clang-completer

 

PS. 另外, 对于配置脚本 .ycm_extra_conf.py, 也需要做适当的修改以支持C语言族, 添加头文件路径等.