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的类变量和成员变量用法实例教程
Aug 25 Python
深入理解Python 代码优化详解
Oct 27 Python
Python脚本实现自动发带图的微博
Apr 27 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
Python yield 使用方法浅析
May 20 Python
Python下简易的单例模式详解
Apr 08 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
python读取文件指定行内容实例讲解
Mar 02 Python
Python多个MP4合成视频的实现方法
Jul 16 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
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
Python中的lstrip()方法使用简介
2015/05/19 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
python实现Windows电脑定时关机
2018/06/20 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
Python实现登陆文件验证方法
2018/10/06 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
幸福家庭事迹材料
2014/02/03 职场文书
市场开发计划书
2014/05/07 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书