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抓取Discuz!用户名脚本代码
Dec 30 Python
回调函数的意义以及python实现实例
Jun 20 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
mac 安装python网络请求包requests方法
Jun 13 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
详解python中index()、find()方法
Aug 29 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 Python
Python用摘要算法生成token及检验token的示例代码
Dec 01 Python
使用pycharm运行flask应用程序的详细教程
Jun 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
一贴学会PHP 新手入门教程
2009/08/03 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
java判断三位数的实例讲解
2019/06/10 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
Python实现序列化及csv文件读取
2020/01/19 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
无偿献血倡议书
2014/04/14 职场文书
农村门前三包责任书
2014/07/25 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python