youcompleteme
2016年05月26日

概述

YouCompleteMe是一个vim代码补全引擎,目前支持C,C++,c#,Go,java,Python,Rust,javascript/typescript语言的补全工作。它安装配置简单,Bug 很少。 对C/C++来说youcompleteme现在应该是最好选择,借助clang的强大功能,补全效率和准确性极高,而且可以模糊匹配(见下面的demo)。不管你的C++代码用什么怪异的写法,只要能编译通过,都能补全,即使是C++11的lambda和auto都没有障碍,比codeblock这些根据tag index补全的IDE都要强大。

对于各种启动错误可以在vim中使用命令:YcmDebugInfo查看,通常会列出/tmp/ycm_temp/server_xxxxx_stderr.log文件,然后看看文件中具体的错误信息

ImportError: libedit.so.2: cannot open shared object file: No such file or directory youcompleteme

编译配置

~/.vim/bundle/YouCompleteMe/install.py --clang-completer --system-libclang --system-boost

针对前一阵迁移到x86_64环境,ycm报错如下,最终利用google在项目的github讨论中找到答案

对于没有对应3.x版的32位clang预编译包的解决办法

根据项目首页的安装说明(其中完全安装的部分)

  1. 下载llvm网站3.x版Fedora发行版的32位预编译包(以3.5为例)
    wget http://llvm.org/releases/3.5.0/clang+llvm-3.5.0-i686-fedora20.tar.xz
  2. 解压缩到一个临时目录
    cd ~
    mkdir ycm_temp
    cd ycm_temp
    tar xf /path/of/clang+llvm-3.5.0-i686-fedora20.tar.xz -C .
  1. 生成make文件
    cd ~
    mkdir ycm_build
    cd ycm_build
    cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
  1. 编译
    make ycm_support_libs
  1. 可以开始配置ycm了

对于install.sh脚本下载clang的修改

由于llvm项目网站在国外,使用脚本的默认设置下载速度很不理想
解决办法有两个

方法一:

  1. 配置goagent之类的代理工具
  2. 运行install.sh之前 修改HTTP_PROXY环境变量
    例如:
HTTP_PROXY="127.0.0.1:8087" $HOME/.vim/bundle/YouCompleteMe/install.sh --clang-completer

方法二:

  1. 打开~/.vim/bundle/YouCompleteMe/cpp/ycm/CMakeLists.txt,找到i386的下载地址和文件名
  2. 利用axel之类的多线程下载工具手动下载
  3. 注释掉CMakeLists.txt里边的分析下载链接和下载的部分
if(APPLE)
...
file(
...
  1. 添加复制文件的命令
add_custom_command(TARGET MyTest POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
        "~/downloads/clang+llvm-3.3-i386-debian6.tar.bz2"
        "./${CLANG_FILENAME}")
  1. 编译
~/.vim/bundle/YouCompleteMe/install.sh --clang-completer

方法二虽然有点麻烦,不过在最近的YouCompleteMe的更新中,似乎由于clang刚更新,出现了一些不兼容的情况.
导致无法自动匹配下载链接…最后只能使用方法二手动下载

相关链接

项目网站
https://github.com/Valloric/YouCompleteMe

llvm项目网站
http://llvm.org/releases/download.html#3.5