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网络编程学习笔记(一)
Jun 09 Python
python修改注册表终止360进程实例
Oct 13 Python
Python魔术方法详解
Feb 14 Python
Win10下python3.5和python2.7环境变量配置教程
Sep 18 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
python之array赋值技巧分享
Nov 28 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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计算排列组合的方法
2013/11/13 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
强制设为首页代码
2006/06/19 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
使用python Django做网页
2013/11/04 Python
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
django初始化数据库的实例
2018/05/27 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
2018/06/26 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
python 决策树算法的实现
2020/10/09 Python
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
乡镇安全生产目标责任书
2014/07/23 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android