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实现全局变量的两个解决方法
Jul 03 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
Python实现的RSS阅读器实例
Jul 25 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
pygame实现成语填空游戏
Oct 29 Python
python用quad、dblquad实现一维二维积分的实例详解
Nov 20 Python
py-charm延长试用期限实例
Dec 22 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 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
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
php HTML无刷新提交表单
2016/04/05 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
JS实现拼图游戏
2021/01/29 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
python实现的一个p2p文件传输实例
2014/06/04 Python
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
Python实现的双色球生成功能示例
2017/12/18 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
python 实现简单的FTP程序
2019/12/27 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
什么时候需要进行强制类型转换
2016/09/03 面试题
中专毕业个人的自荐信格式
2013/09/21 职场文书
高中生的自我评价
2014/03/04 职场文书
超市中秋节促销方案
2014/03/21 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
医院合作协议书
2014/08/19 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
失恋33天观后感
2015/06/11 职场文书