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调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
python中sleep函数用法实例分析
Apr 29 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
Nov 09 Python
Python Paramiko模块的使用实际案例
Feb 01 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
django如何自己创建一个中间件
Jul 24 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
Python调用C语言程序方法解析
Jul 07 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
如何用python爬取微博热搜数据并保存
Feb 20 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 生成唯一id的几种解决方法
2013/03/08 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
js对象的复制继承实例
2015/01/10 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
面试常见的js算法题
2017/03/23 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
Python smallseg分词用法实例分析
2015/05/28 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
90后毕业生的求职信范文
2013/09/21 职场文书
安全生产汇报材料
2014/02/17 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
技校毕业生自荐信
2014/06/03 职场文书
大学生英文求职信范文
2015/03/19 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python