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遍历 truple list dictionary的几种方法总结
Sep 11 Python
python数据结构之链表的实例讲解
Jul 25 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
Python 面试中 8 个必考问题
Nov 16 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
python print输出延时,让其立刻输出的方法
Jan 07 Python
Python中的引用知识点总结
May 20 Python
django 多数据库及分库实现方式
Apr 01 Python
解决Jupyter无法导入已安装的 module问题
Apr 17 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
Python selenium的这三种等待方式一定要会!
Jun 10 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/12/23 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
详解参数传递四种形式
2015/07/21 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
浅谈Vue数据绑定的原理
2018/01/08 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
python遍历目录的方法小结
2016/04/28 Python
python 瀑布线指标编写实例
2020/06/03 Python
python新手学习可变和不可变对象
2020/06/11 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
档案接收函
2014/01/13 职场文书
一年级班主任寄语
2014/01/19 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
记账会计岗位职责
2014/06/16 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
六五普法宣传标语
2014/10/06 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
深入浅析Django MTV模式
2021/09/04 Python