花了好几天的时间,总算把YCM装上了。期间遇到了各种问题,主要还是因为刚进linux,对linux环境不熟, 命令资料等查了半天。当然,YCM也普遍被认为是一种安装配置复杂,但使用起来超简单的插件。

好,废话不多说。开始干活。(英语好的请无视后面内容,直接狂戳它:https://github.com/Valloric/YouCompleteMe,YCM在git的上主页,详细介绍了如何安装配置YCM。遗憾的是,我完全按git教程的步骤没成功,还得做一点点小修改,我总结到了最后面。)

第一步,安装带python选项的vim

YCM需要VIM7.3.584以上且支持python。Ubuntu中是VIM7.4但没有python。查看你的vim是否支持python,运行命令:vim --version。如果出现+python,则表示支持。如果是-python,抱歉,可能你得从源码编译安装了。

1. 编译Vim之前,需要下载编译的相关工具和一些库(都要下载安装好,不然后面可能会出现问题)

sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev libgtk2.0-dev libatk1.0-dev libbonoboui2-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev ruby-dev mercurial

2. 用apt-get卸载之前的vim。

3. 下载新版本vim7.4源码,网址为:(ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2)

tar -xjvf vim-7.4.tar.bz2

解压至 ~/downloads/vim74/

4. cd ~/downloads/vim74/

设置Vim源码的编译属性

./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=/usr/lib/python2.7/config  --enable-cscope --enable-multibyte --prefix=/usr

需要重新配置可 输入 make distclean #清理一下上一次编译生成的所有文件。

其中参数说明如下:

  • --with-features=huge:支持最大特性
  • --enable-pythoninterp:启用Vim对python编写的插件的支持
  • --enable-multibyte:多字节支持 可以在Vim中输入中文
  • --enable-cscope:Vim对cscope支持
  • --with-python-config-dir=/usr/lib/python2.7/config-i386-linux-gnu/ 指定 python 路径
  • --prefix=/usr:编译安装路径

这里值得注意的是,你在第一步时一定要先安装好python-dev。不然后面make install 后虽然成功了,但是vim --version后还是会出现-python。这里的关键在于/usr/lib64/python2.6/config中要用config.c这个文件,如果你没安好python-dev的话就没这个文件。(我掉到这坑爬了好久才出来。。所以第一步还是很重要的)

sudo make VIMRUNTIMEDIR=/usr/share/vim/vim74

sudo make install

第二步,编译安装llvm-clang(如果你不需要ycm支持C/C++语义补全。  直接到下一步)

按照git中的教程,有两种方法,一种是下载现成编译好的二进制代码,问题是给出的链接中只有有限版本的二进制包,如CentOS就没有,而且llvm-clang3.3+ 的只有Ubuntu64位,没有32位的。第二种方法是下载源码包,自行编译。据说编译时间暴慢,我还没试过,下次在CentOS下是成功了再写上来。

我为了省事,下了个llvm-clang3.2  Ubuntu12.04 32位已编译好的二进制包,但我的Ubuntu 14.04 32位的,你们根据自己系统看着办吧,如果是CentOS可能就得自己编译安装了。

下好后解压到~/ycm_tmp

mkdir ~/ycm_tmp

tar -xvf  clang陛3.2-x86-linux-ubuntu-12.04.tar.gz

第三步,利用Vundle下好YouCompleteMe

Vundle是个vim插件管理器。

在装好Vundle后,在你的.vimrc中里面添加

Plugin 'Valloric/YouCompleteMe'

之后退出.vimrc, 在打开vim运行:

BundleInstall

这里Vundle可能会运行比较久,因为YCM相对于其它插件还是比较大的Give it time(我大概用了半个小时,-.-||)。

之后在你的Vundle文件下就有会YouCompleteMe文件夹了。

第四步,编译YouCompleteMe

1. 首先要安装好cmake,因为YCM需要用到

sudo apt-get install cmake

2. 建好文件夹ycm_build,进入(待会这个文件夹ycm_build存放cmake时产生的文件, 名字必须为ycm_build,后面如果你要用自带的.ycm_extra_config.py的话)

cd ~
mkdir ycm_build
cd ycm_build

3. 如果你不需要ycm支持C/C++语义补全,如下(注意中间有个点 "." 代表当前目录):

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

  如果需要支持C/C++语义补全,如下:

cmake -G "Unix Makefiles"  -DEXTERNAL_LIBCLANG_PATH=~/ycm_tmp/clang+llvm-3.2-x86-linux-ubuntu-12.04/lib/libclang.so .   ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
make ycm_support_libs
 

 其中-DEXTERNAL_LIBCLANG_PATH就是第二步中你的llvm-clang 下的libclang.so文件。

 其实git教程中不是这样的,它只要llvm-clang根目录(也就是包含了include,lib,bin等文件的目录)就可以了。但我这样做虽然编译成功了,但还是不能支持c/c++中的语义补全(如成员变量补全)。这个坑我又爬了大半天。。。

 git教程中的应该是这样(反正我这样做是没搞定。。 你们自己看着办):

cmake -G "Unix Makefiles"  -DEXTERNAL_LIBCLANG_PATH=~/ycm_tmp/clang+llvm-3.2-x86-linux-ubuntu-12.04/ .   ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
make ycm_support_libs

到此为止,你的~/ycm_build中应该会出现一些文件和文件夹(之前是空目录)。说明ycm已经装好了,最后一步就是配置你的.vimrc啦!

  

第五步,配置YouCompleteMe

  YCM需要.ycm_extra_conf.py这个文件方能很好的工作。其实它已经存在啦,你将它拷贝到你的项目工程目录(或者更上层目录,这都无所谓,反正是递归查找,我的就直接拷到了~/下了)并做一丢丢修改就完成了!!

  cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py      ~/.ycm_extra_conf.py

  编辑~/.ycm_extra_conf.py

  在 flags中加入'-I' /usr/include/c++/4.8    和 '-I'  '/usr/include/i386-linux-gnu/c++/4.8'

  然后找到

try:
final_flags.remove( '-stdlib=libc++' )
except ValueError:
pass

  并且全部注释。

最后一步,在你的.vimrc中加入这个.ycm_extra_conf.py文件在你系统中的路径。我的如下

let g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py'

  至此,大功告成!!打开你的vim试试效果吧。

附: 安装过程中出现的问题与解决方案:

Q1: 源码编译安装支持python的vim失败。虽然编译安装成功了,但是在vim  --version中还是出现了-python

A1: 查看你的/usr/lib64/python2.6/config(你对应的python目录),看看里面是否有config.c。如果没有,请sudo apt-get install python-dev。第一步中那一大堆软件还是很有必要装的.

Q2:利用Vundle下载YCM时迟迟没反应。

A2: 慢慢等吧。网速不好还可能下载失败。

Q3:YCM已经安装好了,但是没有语义补全功能。比如不能补全成员变量等。

A3:

  原因1:在VIM中运行YcmDiags,看看有没有什么warn或error,我的就出现了bits/c++config.h can not found.

  运行命令 locate bit/c++config.h

  找到相应路径。编辑~/.ycm_extra_conf.py

  在 flags中加入响应路径。如我的就是: '-I' /usr/include/c++/4.8    和 '-I'  '/usr/include/i386-linux-gnu/c++/4.8'

  具体原因请移步http://stackoverflow.com/questions/9201521/g-4-6-issue-no-bits-cconfig-h-file-as-required-by-the-header-cstring

  原因2:

  在编译YCM的时候,是这样的(没有包含具体的libclang):

  cmake -G "Unix Makefiles"  -DEXTERNAL_LIBCLANG_PATH=~/ycm_tmp/clang+llvm-3.2-x86-linux-ubuntu-12.04/ .   ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

 改为这样编译试试(注意应当把当前的ycm_build删除再新建一个空的)
  cmake -G "Unix Makefiles"  -DEXTERNAL_LIBCLANG_PATH=~/ycm_tmp/clang+llvm-3.2-x86-linux-ubuntu-12.04/lib/libclang.so .   ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
  

参考链接:

  http://www.cnblogs.com/zhongcq/p/3630047.html

  https://github.com/Valloric/YouCompleteMe

  http://www.cnblogs.com/csuftzzk/p/3435710.html

 http://www.cnblogs.com/weishun/p/tencent-shixi-2014-08-19-vimrc-youcompleteme.html

YCM的安装与配置的更多相关文章

  1. YCM安装与配置

    1.重新编译vim 2.通过vundle安装YCM 3.安装CMake 4.下载预先编译好的llvm+clang 5.看官网的命令,生成CMake的编译文件并编译 配置YCM: 要额外配置ycm_ex ...

  2. Linux --- vim 安装、支持python3的配置、插件自动补全YCM的安装配置及全过程错误总结

    1.git(用来下载vim和相关插件) sudo apt-get install git 2,cmake(用来编译clang-llvm) sudo apt-get install build-esse ...

  3. CentOS 7下的Vim自动补齐插件YouCompleteMe安装及配置

    备注:现在对于 YouCompleteMe 的安装应采用更为简单的方法,即利用 Vundle 来安装这个插件.具体方法可见: Vundle 主页 YouCompleteMe 主页 而 .vimrc 的 ...

  4. 【转】Vim自动补全插件----YouCompleteMe安装与配置

    原文网址:http://www.cnblogs.com/zhongcq/p/3630047.html 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assis ...

  5. Vim自动补全插件----YouCompleteMe安装与配置

    Vim自动补全插件----YouCompleteMe安装与配置 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assist X这么方便快捷的补全插件呢?以前用 ...

  6. JDK安装与配置

    JDK安装与配置 一.下载 JDK是ORACLE提供免费下载使用的,官网地址:https://www.oracle.com/index.html 一般选择Java SE版本即可,企业版的选择Java ...

  7. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  8. 烂泥:redis3.2.3安装与配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前一段时间写过一篇codis集群的文章,写那篇文章主要是因为当时的项目不支持redis自 ...

  9. mysql源码包手动安装、配置以及测试(亲测可行)

    笔记编者:小波/qq463431476博客首页:http://www.cnblogs.com/xiaobo-Linux/ 记下这篇mysql笔记,望日后有用! redhat6采用centos yum源 ...

随机推荐

  1. Golang学习 - fmt 包

    ------------------------------------------------------------ // Print 将参数列表 a 中的各个参数转换为字符串并写入到标准输出中. ...

  2. nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache

    要用到的软件:libiconv-1.13.tar.gz libmcrypt-2.5.8.tar.gz mcrypt-2.6.8.tar.gz mhash-0.9.9.9.tar.gz memcache ...

  3. 关于linux系统安全配置脚本

    本脚本是第二次更新,已经大量应用在某大型媒体网站体系中,加入了之前没有想到的一些安全设置.使用方法将其复制,保存为一个shell文件,比如security.sh.将其上传到Linux服务器上,执行sh ...

  4. Linux重定向的理解

    /* 重定向的实例 dup2函数 利用filefd来代替STDOUT(标准输出流),write写入filefd的数据,重定向写出到STDOUT中: */ #include <stdio.h> ...

  5. android 使用<merge>标签

    <merge /> 标签在你嵌套 Layout 时取消了 UI 层级中冗余的 ViewGroup .比如,如果你有一个 Layout 是一个竖直方向的 LinearLayout,其中包含两 ...

  6. maven的update project是什么意思

    一个是更新依赖,然后是clean projects,重新编译

  7. 跨域 HTTP 请求

    如果你需要从不同的服务器(不同域名)上获取数据就需要使用跨域 HTTP 请求. 跨域请求在网页上非常常见.很多网页从不同服务器上载入 CSS, 图片,Js脚本等. 在现代浏览器中,为了数据的安全,所有 ...

  8. 剑指Offer15 合并两个已排序链表

    /************************************************************************* > File Name: 15_MergeT ...

  9. hdu 3111 DLX解数独

    思路:裸的DLX解数独.关键是建图,感觉还不如写个dfs直接,DLX写这个的代码很烦. #include<set> #include<map> #include<cmat ...

  10. 如何优雅地制作精排 ePub —— 个人电子书制作规范及基本样式表

    随着大数据时代的到来,多种移动阅读终端方兴未艾 —— Amazon Kindle不再小众.各互联网巨头纷纷推出旗下的电子书阅读软件.有了阅读的软件/硬件支持,必不可少的就是阅读什么的问题了.ePub格 ...