vim自动补全插件YouCompleteMe(YCM)安装过程解析


Posted in Python onOctober 21, 2019

Vim是全平台上一个高度可拓展的编辑器。它本身只是一个简陋的编辑器,但是因为有各种插件而变得强大。使用Vim编写代码就不免遇到代码补全的问题。常用的代码补全插件有两个:日本人shougo写的neocomplete和前Google工程师Valloric写的YouCompleteMe。用的人比较多的还是YouCompleteMe。YouCompleteMe被称为Vim最难配置的插件,当初配置好YouCompleteMe也是费了九牛二虎之力,印象中是花了整整一个晚上。回报也是显然的,支持定义跳转,变量跳转,超快的自动补全。下面进入正题。

首先是自动补全的机制,在我的理解里自动补全的实现是通过一个server来实现的。在YouCompleteMe里,server就是python。所以当你打开Vim,plug YCM,你可以在进程列表里发现一个python进程,这个进程其实就是扮演了server的角色。当你编辑代码时,server在文件目录里寻找关联的文件,对全文进行处理。然后用代码补全的方式呈现出来。

在YCM的github主页有各个系统的对应安装方式。最大的不同是这个软件需要你自己去build,没错..之前从来没有做过这种操作所以那天晚上踩了无数坑。直到按照官网上的指导在命令行中运行以下两个步骤。

cd ~/.vim/bundle/YouCompleteMe#如果是vim-plug,应该是在~/.vim/plugins/YouCompleteMe
./install.py

ok,一排排代码在terminal中滚动,build完成。打开vim却出现如下报错:

The ycmd server SHUT DOWN (restart with ':YcmRestartServer')

百思不得其解,多方查找后得知原因。YouCompleteMe对python有强依赖型,就像neocomplete对Lua有强依赖性。所以用来build的python版本必须小心翼翼。我在这里使用的是condapython,也就是虚拟环境中的python,不管build多少次都依然报错。

最终我用了以下的方法解决:首先进入terminal,因为是conda环境所以前面有(base)表示基础虚拟环境,此时运行which python,可以看到当前python是conda环境安装的。

(base) appledeMacBook-Pro-4:~ apple$ which python
/Users/apple/miniconda3/bin/python

ok,conda deactivate失能conda再运行是什么结果呢。

(base) appledeMacBook-Pro-4:~ apple$ conda deactivate
appledeMacBook-Pro-4:~ apple$ which python
/usr/bin/python
appledeMacBook-Pro-4:~ apple$ which python2
/usr/bin/python2
appledeMacBook-Pro-4:~ apple$ which python3
/usr/bin/python3
appledeMacBook-Pro-4:~ apple$ python3 --version
Python 3.7.3

我们可以看到,当前使用的python已经是系统自带的python了,不管是brewpython还是原生的python都可以使用。

那么我们按照官网说明cd到插件文件夹。不要运行 ./install.py 直接运行

python3 install.py

等待build完成,再打开vim、没有报错。大功告成!

需要注意的是YouCompleteMe对Python依赖严重。一旦Vim版本或者python版本改变,照上述方法重新build一遍即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现测试磁盘性能的方法
Mar 12 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
开始着手第一个Django项目
Jul 15 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
python dataframe NaN处理方式
Dec 26 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
如何理解python中数字列表
May 29 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 #Python
python打印直角三角形与等腰三角形实例代码
Oct 20 #Python
python配置文件写入过程详解
Oct 19 #Python
python实现广度优先搜索过程解析
Oct 19 #Python
python字符串格式化方式解析
Oct 19 #Python
基于python3监控服务器状态进行邮件报警
Oct 19 #Python
使用python绘制温度变化雷达图
Oct 18 #Python
You might like
PHP Error与Logging函数的深入理解
2013/06/03 PHP
浅谈PHP的反射机制
2016/12/15 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
js的三种继承方式详解
2017/01/21 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
wxPython使用系统剪切板的方法
2015/06/16 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
阿波罗盒子:Apollo Box
2017/08/14 全球购物
结构和类有什么异同
2012/07/16 面试题
介绍一下except的用法和作用
2015/01/22 面试题
职称评定自我鉴定
2014/03/18 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
银行授权委托书样本
2014/10/13 职场文书
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js