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中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
Python中的高级函数map/reduce使用实例
Apr 13 Python
Python中处理字符串之islower()方法的使用简介
May 19 Python
Python3搜索及替换文件中文本的方法
May 22 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
简单介绍Python的第三方库yaml
Jun 18 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
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
js实现录音上传功能
2019/11/22 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
在Python中使用元类的教程
2015/04/28 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
对numpy中shape的深入理解
2018/06/15 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
python实现三种随机请求头方式
2021/01/05 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
小学数学教学反思
2014/02/02 职场文书
委托公证书范本
2014/04/03 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
先进事迹材料范文
2014/12/29 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
分享几种python 变量合并方法
2022/03/20 Python
Python利用FlashText算法实现替换字符串
2022/03/31 Python
微信小程序调用python模型
2022/04/21 Python
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL