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实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
Django如何配置mysql数据库
May 04 Python
Python+selenium 获取一组元素属性值的实例
Jun 22 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
Python二进制串转换为通用字符串的方法
Jul 23 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
python实现动态数组的示例代码
Jul 15 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
python数据类型强制转换实例详解
Jun 22 Python
Python实现手势识别
Oct 21 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
zend api扩展的php对象的autoload工具
2011/04/18 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
jquery 学习之二 属性相关
2010/11/23 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
python学习开发mock接口
2019/04/28 Python
Python 硬币兑换问题
2019/07/29 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
python队列原理及实现方法示例
2019/11/27 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年妇联工作总结
2014/11/21 职场文书
优秀班集体申报材料
2014/12/25 职场文书
在校证明模板
2015/06/17 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
vue打包时去掉所有的console.log
2022/04/10 Vue.js