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

2017-02-20 14:16:54 +08:00
 jpush

YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine for Vim. 参考: https://github.com/Valloric/YouCompleteMe#full-installation-guide 本篇文章默认读者知道什么是 unix/linux , vim/vi , YouCompleteMe ,如果有不清楚的,Search engine is your friend 或者留言讨论。 YouCompleteMe 简称 YCM 以下都称为 YCM 。

YouCompleteMe 的强大想必大家都听说过,简单的用一句话来概括的话,媲美 VS 的自动补全 当然可能有一点点过,但可见其强大。但是作为一个十分强大的 vim 插件,他可是十分的难以安装,几乎所有的人,都会在安装阶段苦苦挣扎(别问老夫怎么知道的),然后要么成功安装享受工具带来的便利,要么放弃继续使用传统的自动补全工具(当然也没有那么差,但可能没有 YCM 那么强大)。

经过老夫的辛苦探索,终于在听到 YCM 大名的一年之后成功安装,所以分享出来,希望能够帮助到更多的人。另外如果在安装过程中遇到任何问题都欢迎在评论与我讨论。

有了你我才是我,你的存在令我完整 —— 老夫

系统环境: Kali-Rolling on Oracle VirtualBox ,可以当作是最新版(或者说实验版)的 Debian

目标:成功安装使用 YCM , 尽量少的编译软件(即尽量使用预编译 deb 包),尽量可以实现更多种语言的自动补全

安装步骤:

0. 确保 vim 版本是 7.4.143 或以上,并且支持 python 2/3 脚本

从上图可以看出老夫的 vim 版本是 8.0.49 且支持 python3 脚本但不支持 python2 脚本(截图的倒数第 7 , 8 行) 如果你的打印结果中没有相关 python 脚本信息,还可以在 vim 中键入命令 :echo has('python') || has('python3'),若结果是 1 则证明是支持的。

若不论是 vim 版本不满足条件或者是不支持 python 脚本,那么就需要从源码编译安装 vim 了,

1. 通过 Vundle 来安装 YCM (官方推荐)

快速安装 vim 的插件管理插件 vundle

在 vim 的配置文件 ~/.vimrc 中添加一行(在call vundle#begin()call vundle#end() 之间)

call vundle#begin()
. . .
Plugin 'Valloric/YouCompleteMe ’
. . .
call vundle#end()

然后保存运行 vim 命令 :PluginInstall 安装 需要特别注意的是这个时候可能等的时间会相当的长

这个时候打开 vim 可能则会有警告如下图

1.5 通过 Git 安装 YCM

如果你跟老夫一样,等待 Vundle 安装 YCM 等了好久终于貌似好像成功了,打开 vim 却发现 YouCompleteme unavailable : no module named future (当然没有遇到算你运气好),那么你应该考虑一下换用 Git 来安装 YCM :

# 下载 (在 `~/.vim/bundle` 目录下)
$ git clone --recursive [https://github.com/Valloric/YouCompleteMe.git]( https://github.com/Valloric/YouCompleteMe.git)
# 检查完整性(在 `~/.vim/bundle/YouCompleteMe` 目录下)
$ git submodule update --init --recursive

2. 下载安装最新版的 libclang

如果不需要 C 家族的语义化补全,则可跳过这一步

# apt-get install llvm-3.9 clang-3.9 libclang-3.9-dev libboost-all-dev

PS: ** YCM 官方墙烈推荐使用上游编译的二进制文件代替系统自带的 libclang**

You can use the system libclang only if you are sure it is version 3.9 or higher, otherwise don't. Even if it is, we recommend using the official binaries from llvm.org if at all possible. Make sure you download the correct archive file for your OS.

We STRONGLY recommend AGAINST use of the system libclang instead of the upstream compiled binaries. Random things may break. Save yourself the hassle and use the upstream pre-built libclang.

3. 编译构建 ycm_core

** 需要: cmake python3-dev**

YCM 的顶层目录或者说根目录应该是 ~/.vim/bundle/YouCompleteMe

$ mkdir ~/.ycm_build
$ cd ~/.ycm_build

如果跳过第三步的话,则可以直接运行

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

如果没有跳过第三步,说明需要 c 家族的语义化补全则需运行

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

编译通过的,没有报错,但是这个编译结果是有问题的,看第 3 行,反复强调的 c 家族的语义补全没有了。经过老夫反复的检查,原来是上面的编译命令少了一个 - 符号

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

这个时候编译的过程如下图:

其实这个还是有问题的,看倒数第 3 、 4 行,使用的是外部的 libclang-3.6 ,第 2 步中说的系统安装的 libclang 最低要是是 3.9 。 这个时候就需要删除 ~/.ycm_build 目录下的所有文件,使用下面的命令指定 libclang 的版本重新编译。

$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON -DEXTERNAL_LIBCLANG_PATH=/usr/lib/x86_64-linux-gnu/libclang-3.9.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

编译的结果是之前新建的目录(也就是当前目录下生成了一些 Makefile 文件)

#  --config Release 这个构建选项进针对 Windows
$ cmake --build . --target ycm_core --config Release

3.5 配置

$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/
“ ~/.vimrc
let g:ycm_server_python_interpreter='/usr/bin/python'
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'

4. 其他语言的支持

C#、 Go 、 TypeScript 、 JavaScript 、 Rust support 由于老夫对这些语言没有太多的涉猎就不做介绍了。

5. 测试安装

首先新建一个 hello.c 文件,

可以看到自动补全了头文件,厉害了老夫的 YCM

然后在 vim 中运行 :YcmToggleLogs stderr 命令查看错误日志,

没有看到报错信息,则证明 YCM 已成功安装。

作者:老東 D 不知火-极光

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

20189 次点击
所在节点    Vim
58 条回复
CodeingBoy
2017-02-20 14:39:09 +08:00
v2 上面好像是禁止全文转载的
lll9p
2017-02-20 14:40:48 +08:00
我想知道 windows 怎么安。。
msg7086
2017-02-20 14:42:07 +08:00
似乎阁下并不是作者。先为阁下点了举报。
Immortal
2017-02-20 14:43:05 +08:00
这东西不是难装
是国内这个网络 下载下依赖之类的要很久
总以为是卡死了一样
Muninn
2017-02-20 15:03:57 +08:00
现在 ycm 自带安装脚本一键执行啊
这是抄了个旧文?
jpush
2017-02-20 15:05:23 +08:00
@msg7086 文末有附上作者的原文链接你有看到吗
jpush
2017-02-20 15:06:19 +08:00
@CodeingBoy 这是原创,文末有作者链接,作者是我们的成员之一,这是团队账号
msg7086
2017-02-20 15:16:51 +08:00
@jpush
因为阁下的名字与作者一栏的名字不同,并且也没有在文中标明作者是阁下团队的一员,因此为阁下点了举报。
如果是团队成员,那么当然是没有问题的。
daben1990
2017-02-20 15:20:18 +08:00
装过一次,卡的不行不行的了
SourceMan
2017-02-20 15:20:52 +08:00
极光吗?
这个使用团队号的同事火气有点大啊。
whatot
2017-02-20 15:40:51 +08:00
Plug 'Valloric/YouCompleteMe', { 'do': 'python2 ./install.py --clang-completer --system-libclang --system-boost --gocode-completer' }

另外就是配置问题了吧
whatot
2017-02-20 15:41:21 +08:00
如果用 arch 可以这么装,快一点
diffworld
2017-02-20 15:43:57 +08:00
在 vim 补全上尝试了很多,但最后还是选择 neocomplete.vim+补全字典的方式,关键词保存在文件中,随时增加和删除
linuap
2017-02-20 16:17:40 +08:00
ycm 确实神器,不过也挺好装的吧...挂个 proxychains 几乎全自动了...
不过现在转 spacemacs 了依然用的是 ycmd 补全 :)
jpush
2017-02-20 16:31:32 +08:00
@msg7086 抱歉,没注意账号 ID 与文末作者关系的注明,是我的疏忽
jpush
2017-02-20 16:43:31 +08:00
@SourceMan My fault ,没有注明该账号 ID JPush 就是极光,导致了误解
lypdarling
2017-02-20 16:48:45 +08:00
Mac 和 Linux 下安装应该非常简单啊
tabris17
2017-02-20 16:50:05 +08:00
太…………………………作了
chez
2017-02-20 16:52:58 +08:00
楼主在 kali 平台安 Youcompleteme 是要干坏事么?
jpush
2017-02-20 17:06:26 +08:00
@lll9p windows 下用宇宙最强 VS 就好了啊,用什么 VIM

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341751

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX