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 相关文章推荐
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
Python中函数参数调用方式分析
Aug 09 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
Python解决pip install时出现的Could not fetch URL问题
Aug 01 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
May 13 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
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
Python的re模块正则表达式操作
2016/05/25 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
微信小程序python用户认证的实现
2019/07/29 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
python实现canny边缘检测
2020/09/14 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
查环查孕证明
2014/01/10 职场文书
企业文化建设实施方案
2014/03/22 职场文书
购房协议书范本
2014/04/11 职场文书
项目合作意向书模板
2014/07/29 职场文书
确保工程质量承诺书
2015/04/29 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android