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

极光大数据 极光大数据     2022-08-24     152

关键词:

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 version

从上图可以看出老夫的 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 可能则会有警告如下图

技术分享
vim warning

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
  • 生成 makefile

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

$ 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 文件)

技术分享
Makefile
  • 构建 ycm_core
#  --config Release 这个构建选项进针对 Windows
$ cmake --build . --target ycm_core --config Release
技术分享
build ycm_core

3.5 配置

  • 复制 .ycm_extra_conf.py 文件
$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/
  • 添加 vim 配置
    注意下面的 python 解释器的路径要和编译 ycm_core 的时候使用的 python 解释器是相同的版本(2 或 3)
“ ~/.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 文件,

技术分享
hello.c

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

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

技术分享
stderr

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

作者:Helperhaps - 极光

原文:令人眼前一亮的下拉式终端 Tilda & Guake

知乎专栏:极光日报
















一步一步带你反编译apk,并教你修改smali和重新打包

一、工具介绍:1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包;2.dex2jar:该工具作用是将classes.dex文件,反编译出源码(如果apk未加固),反编译出文件,使用jd-gui工具进行查看;3.Auto-Sign... 查看详情

(第一篇)一步一步带你了解linqtoobject(代码片段)

...函数,我们必须学会委托,这是本文的宗旨。下面开始第一步。在第一步开始之前,我们做点准备工作,建立一个学生类和一个班级类,类结构如下publicclassStudentpublicintIdget;set;publicintCla 查看详情

vue一步一步带你封装一个按钮组件(代码片段)

#前言本文主要对子组件的封装做一个了解首先我们直接看一下代码显示首先是今天有一个学妹过来问我如何封装子组件#实现效果首先这个组件是基于eleemnt-ui进行封装的我们看一眼实现效果 有了实现效果之后我们一起来看看... 查看详情

史上最细基于redis实现的分布式session解决单点登录问题,入门导师带你一步一步实现...(代码片段)

点击上方蓝色“终端研发部”,选择“设为星标”学最好的别人,做最好的我们 前戏最近正好在做一个电商项目,跟大家分享一下使用Redis实现分布式session完成单点登录,下一篇与大家分享一下使用Redis实现分布... 查看详情

android一步一步带你实现recyclerview的拖拽和侧滑删除功能

先上效果图: 本篇文章我们来学习一个开源项目Android-ItemTouchHelper-Demo 这个项目使用了RecyclerView的ItemTouchHelper类实现了Item的拖动和删除功能,ItemTouchHelper是v7包下的一个类,我们看一下他的介绍Thisisautilityclasstoaddswip... 查看详情

面试必备透过源码角度一步一步带你分析arraylist扩容机制(代码片段)

一先从ArrayList的构造函数说起ArrayList有三种方式来初始化,构造方法源码如下:/**默认初始容量大小*/privatestaticfinalintDEFAULT_CAPACITY=10;privatestaticfinalObject[]DEFAULTCAPACITY_EMPTY_ELEMENTDATA=;/*默认构造函数,使用初始容量10构造一个空列表... 查看详情

黄聪:史上最详细的kali安装教程没有之一

首先在vm里面新建虚拟机,直接选择典型,然后下一步。 1   2然后到了这一步,选择中间的安装程序光盘镜像文件,然后去文件里面找你自己下载的镜像,这时候可能系统会出现无法检测此光盘镜像中的操作系统... 查看详情

vue3教程:理工直男都是如何一步一步带妹构建插件?(代码片段)

作者:Shadeed译者:前端小智来源:learnvue有梦想,有干货,微信搜索【大迁世界】关注这个在凌晨还在刷碗的刷碗智。本文GitHubhttps://github.com/qq449245884/xiaozhi已收录,有一线大厂面试完整考点、资料以及我... 查看详情

fedora27安装vim插件youcompleteme

.../github.com/Valloric/YouCompleteMe2.其github的网站上详细地给出了安装该插件的步骤,但是由于该插件所依赖的软件和库比较多,稍有出入就会出错,所以该插件也被称为史上最难安装VIM插件。经过 查看详情

windows系统带你一步一步无脑使用babel

 不废话直接写看步骤:1、在F盘新建一个文件夹叫babel2、npminit初始化项目3、全局安装npminstallbabelbabel-cli-g4、项目安装npminstallbabel-cli--save-dev项目目录里会多一个node_modules包5、新建一个es6.js文件随便写一段es66、输入指令babeles... 查看详情

youcompleteme入坑指南

本文记录自己安装YouCompleteMe(简称YCM)这款VIM插件的过程,主要目的是记录出错情况和解决方法。YCM号称史上最难装vim插件,根据我的安装经验,此言不虚。得知其强大之时,我便不假思索开始安装。我所用的系统为CentOS6.8,... 查看详情

一步一步安装cygwin

...,双击安装包安装cygwin 选择"installfrominternet",点击下一步 选择安装目录,点击下一步 选择包的下载存放目录,点击“下一步”&nb 查看详情

一步两步带你实现android沉浸式设计(代码片段)

前言    沉浸式不知道什么时候有了两种叫法,一种是沉浸式模式,一种是沉浸式状态栏,Google从Android4.4开始,给我们开发者提供了一套透明的系统UI样式给状态栏和导航栏,这样完美的玩法简直和IOS系统媲... 查看详情

jumpservice一步一步安装(代码片段)

一步一步安装(CentOS)本文档旨在帮助用户了解各组件之间的关系,生产环境部署建议参考 进阶安装文档云服务器快速部署参考 极速安装安装过程中遇到问题可参考 安装过程中常见的问题测试推荐环境CPU:64位双核处理器... 查看详情

Java Joda Time - 下载和安装 - 一步一步 [关闭]

】JavaJodaTime-下载和安装-一步一步[关闭]【英文标题】:JavaJodaTime-download,andinstall-stepbystep[closed]【发布时间】:2012-08-1918:25:44【问题描述】:我无法让JodaTime安装和工作。大多数说明都假设有一定的知识。是否有人可以假设我一无... 查看详情

从零开始带你一步一步使用yolov3测试自己的数据

上一篇: 从零开始带你一步一步使用YOLOv3训练自己的数据我给大家详细介绍了如何使用YOLOv3模型来训练自己的数据集。训练部分完成,本文将继续给大家详细介绍如何使用我们训练好的模型来进行图片的批量测试。一、... 查看详情

fedora29安装vim插件youcompleteme

...://github.com/Valloric/YouCompleteMe其github的网站上详细地给出了安装该插件的步骤,但是由于该插件所依赖的软件和库比较多,稍有出入就会出错,所以该插件也被称为史上最难安装VIM插件。经过了一天在CentOS6.8系统上痛苦... 查看详情

fedora29安装vim插件youcompleteme

...://github.com/Valloric/YouCompleteMe其github的网站上详细地给出了安装该插件的步骤,但是由于该插件所依赖的软件和库比较多,稍有出入就会出错,所以该插件也被称为史上最难安装VIM插件。经过了一天在CentOS6.8系统上痛苦... 查看详情