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安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
pip安装python库的方法总结
Aug 02 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
Python新手学习函数默认参数设置
Jun 03 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
浅析Python模块之间的相互引用问题
Feb 26 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
Terran建筑一览
2020/03/14 星际争霸
php学习之 数组声明
2011/06/09 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
jQuery插件ajaxfileupload.js实现上传文件
2020/10/23 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
python线程、进程和协程详解
2016/07/19 Python
Python实现针对中文排序的方法
2017/05/09 Python
Python工厂函数用法实例分析
2018/05/14 Python
Python lambda表达式用法实例分析
2018/12/25 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
黄继光的英雄事迹材料
2014/02/13 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
支部鉴定材料
2014/06/02 职场文书
校园环保标语
2014/06/13 职场文书
土建施工员岗位职责
2014/07/16 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
Node实现搜索框进行模糊查询
2021/06/28 Javascript
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis