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语言族, 添加头文件路径等.
浙公网安备 33010602011771号