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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
python中的hashlib和base64加密模块使用实例
Sep 02 Python
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
python操作mongodb根据_id查询数据的实现方法
May 20 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
Python中max函数用于二维列表的实例
Apr 03 Python
浅析python继承与多重继承
Sep 13 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
python 数据提取及拆分的实现代码
Aug 26 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
基于Python+QT的gui程序开发实现
Jul 03 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初学入门
2006/11/19 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
js实现微博发布小功能
2017/01/12 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
使用Python求解最大公约数的实现方法
2015/08/20 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
怎样使用Python脚本日志功能
2016/08/14 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
如何用border-image实现文字气泡边框的示例代码
2020/01/21 HTML / CSS
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
经贸专业毕业生求职信范文
2014/05/01 职场文书
应届生面试求职信
2014/07/02 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
高中政治教师教学反思
2016/02/23 职场文书
银行求职信范文
2019/05/13 职场文书
电频谱管理的原则是什么
2022/02/18 无线电