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 相关文章推荐
使用rpclib进行Python网络编程时的注释问题
May 06 Python
Python实现字符串反转的常用方法分析【4种方法】
Sep 30 Python
儿童编程python入门
May 08 Python
python pandas修改列属性的方法详解
Jun 09 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 Python
Django-imagekit的使用详解
Jul 06 Python
Pycharm 跳转回之前所在页面的操作
Feb 05 Python
opencv 分类白天与夜景视频的方法
Jun 05 Python
Python实现归一化算法详情
Mar 18 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
详解PHP实现定时任务的五种方法
2016/07/25 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
PHP7新特性简述
2017/06/11 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
python和C语言混合编程实例
2014/06/04 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
python批量下载抖音视频
2019/06/17 Python
python3实现高效的端口扫描
2019/08/31 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
大学生自我鉴定范文
2013/12/28 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
测量员岗位职责
2015/02/14 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
《1942》观后感
2015/06/08 职场文书
高三教师工作总结2015
2015/07/21 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android