vim win装_VIM的代码补全工具YouCompleteMe在Windows上的安装攻略
前言
用VIM写代码也有很多年了,一直使用其内嵌的自动补全。这种补全没有任何语义分析,仅仅根据当前打开的文件,收集所有的单词形成一个补全库。在输入时,根据已经输入的字母,用逐个字母匹配的方式来寻找可能的补全项。
这个用来写普通文本时勉强够用,但是用来写代码就有点捉襟见肘了。
要实现的代码的自动补全,就需要用到大名鼎鼎的YouCompleteMe了。这个插件简称YCM
,号称是VIM里最难安装的插件,没有之一。之前我也尝试安装过几次,但在Windows下一直没有成功。网上很多的攻略都是基于Linux环境的,所以安装过程中出现的问题难以找到头绪,所以每每就放弃了。
最近升级新电脑,重装开发环境的过程中,觉得是时候啃一啃这个拦路虎了。花了几天时间,终于搞定了所有的问题。有了这个插件后,感觉码代码的境界又高了一级。抱着建设美好祖国的初心,在此写一个中文安装攻略,分享给知乎的VIMER们。
安装过程
- 初始环境
- Windows 10
- VIM 8.1 (WIN32)
- Python 2.7 (WIN32)
YCM
本质上是一个基于Python的服务,需要Python配合VIM运作。在WINDOWS系统中,这要求两者要么都是32位的,要么都是64位的。因为现在VIM官网提供的Windows安装程序只有32位的了,所以这里也用一个32位的Python 2.7与之做配合。
- 安装准备
- Visual Studio Community Version
- CMake
YCM
比一般的VIM插件难安装,原因在于它不光是一个基于vimscript的插件,它还需要在电脑上编译出相关的python动态模块。在Windows上进行编译,需要用到Visual Studio和CMake这两个工具。
微软提供了免费的Visual Studio社区版本。这里下载最新的2019版本,即Version 16。整个安装过程是一个在线安装,在弹出的组件选项里选择Desktop development with C++
。总共需要耗费6G多的硬盘空间。点Install以后,需要花不少时间,可以端个茶找同事聊聊天去了。安装好了以后,需要重启一次系统。
CMake安装最新的版本即可。安装时记得将安装路径加入系统路径。
- 下载插件
Plugin下载这里就不详细讲了,相信大家都会用Vundle。
- 运行安装脚本
用Vundle下载下来的插件根目录下有一个基于python的安装脚本,执行之前,可以了解一下其可用的选项。
cd %userprofile%.vimbundleyoucompleteme
python install.py --help
python install.py --clang-completer
图4的选项中,我们要选择的是--clang-completer
,也就是基于clang的语义分析,来进行代码补全。在实际安装过程中,会下载libclang.dll
,版本为8.0。这个版本号挺重要,后面会再次提到。
编译的过程中会有一些warning,不用管它们。编译到最后生成的一个正则表达式的python动态模块_regex.pyd
,这标志着YCM
的所有动态库都已编译完成。到这里安装的过程就结束了。
使用方法
- 在
_vimrc
中的基本配置
在使用之前,需要在_vimrc
里加入一些基本配置。
g:ycm_key_list_stop_completion
指定选择键,这里回车和Ctrl
+ Y
都可以确认选择。
g:ycm_global_ycm_extra_conf
指定YCM插件目录里面自带的一个python脚本就行,不用对其做任何修改。
g:ycm_log_level
选择log的详细程度,这个选项在插件使用出问题的时候可以用来提供一定的线索。
g:ycm_disable_for_files_larger_than_kb
选择一个文件大小的门限值,如果大于这个门限,ycm对这个文件就停止解析,因为笔者用的工程里有比较大的源文件,所以设为10000KB。
修改好_vimrc
后,重启gvim。运行:YcmDebugInfo
,观察输出来确定安装是否成功。
首先是要确认载入的Clang的版本。前面提到,在运行安装脚本时,会下载Clang 8.0的版本,实际上是下载一个libclang.dll
到YCM插件所在的目录里去。只要load的是这个dll,这里就会显示clang version 8.0.0
。如果版本不对的话,说明系统路径里有旧的Clang dll,一般是因为之前安装过别的版本的LLVM[1]导致的。版本不匹配会导致自动补全的异常。笔者就在这卡住了老半天。如果发现这样的情况,又想保留老版本的LLVM的话,可以改装64位版本的LLVM,因为VIM和PYTHON都是32位的,会忽略64位的dll,最终找到YCM下载的这个正确的dll。
接下来确认YCM载入了我们之前选择的配置文件。
这两点确认后,我们可以认为YCM安装和配置成功。接下来看一个实际使用的例子。
- 使用在基于C语言的嵌入式开发工程中
笔者进行的是大规模的嵌入式开发,工程基于CMake和ARMGCC的toolchain,配置文件是CMakeLists.txt
。要想YCM在这个工程中起作用,需要配置CMakeLists.txt
,在编译过程中生成一个compile_commands.json
文件,生成的方法是在CMakeLists.txt
里加入一行
SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
之后再编译一次,就会发现生成了compile_commands.json
。将这个文件拷贝到源文件的根目录,之后打开任何一个源文件,YCM会逐级向上搜索,直到找到这个文件,并将其中的配置载入。
这时我们再打开任何一个工程中包含的源文件,运行:YcmDebugInfo
,观察输出和之前有什么不同。
从log里可以看到。YCM成功的找到了Compilation database path,也就是compile_commands.json
所在的目录,并从中读取了若干Flag。而Translation Unit
代表当前打开的文件。有了这些,YCM就在后台的server里开始解析代码,并不断提供基于C语言语义分析的自动补全项。
来小试一把牛刀。
可以看到YCM自动识别出了两级的数据结构,并提供了自动完成的建议。
其他的toolchain怎样生成compilation database笔者没有进一步的研究,大家按需谷歌咯。
结语
列举一下YCM相比于VIM原生的自动补全的优势。
- 基于C/C++语义的自动补全
- 打字过程中自动弹出补全建议,不用按特殊键进行触发,因此补全的过程行云流水
- 模糊匹配,不再是按逐个字母的匹配给出建议,对于一个长的Symbol,只要按顺序输入其中的任意字母,无论这些字母是否相邻,都能完成匹配,这就相当于提供了一个智能的缩写。比如前面的例子,要输入
switchchannel
,只需要输入s
,c
,l
,就能找到匹配项。
关于YCM的其他使用方法,笔者也需要花一点时间再进一步地进行体验,这里就不具体展开了。本文的主要目的还是帮助那些没能成功安装上YCM的小伙伴们,先迈出这第一步。后面的进一步配置、以及更高阶的用法,就等待以后慢慢发掘吧。
参考
- ^LLVM是一个open source的compiler架构,其中包含了Clang的可执行程序。一个常见的用法是对代码进行coding style的检查 http://releases.llvm.org/
vim win装_VIM的代码补全工具YouCompleteMe在Windows上的安装攻略相关推荐
- 史上最全智能代码补全工具系列——序篇
近几年,人工智能迅速发展,在各行各业都有所应用,特别是近两年,面向开发者的AI开发工具也是层出不穷,从这些工具中,我们看到了AI能为开发者带来的无限可能性.本系列文字主要介绍目前业界比较实用的几款智能 ...
- 重磅!革命级AI代码补全工具,这款撸码利器让程序员界沸腾了!
我们平时写代码的时候,多少都会依赖编辑器的代码补全功能,敲几个字母就能补全一个词.可是这么多年过去了,语言升级了很多次,而代码提示却没有升级,还是只能限定在一个词,毫无意义地按照字典表顺序排列,这对于 ...
- 【Linux】Ubuntu 18下安装Vim自动补全插件YouCompleteMe(可高速下载安装)
前言 本文写于2020年10月,如果你多年后看见这篇文章,方法可能已经失效,但是请牢记,尽量下载你所处时代的最新版本的软件,会减少很多麻烦. 摆正心态 即便按照本文操作,由于你的系统状态和我的不一样, ...
- vim win装_vim插件管理器的安装和配置-windows
# vim插件管理器的安装和配置-windows ### 前言 ----------------------------- - vim做一框功能强大的编辑器,扩展功能令人称奇,插件机制非常灵活 - 本 ...
- 通过vimplus安装vim代码补全插件YouCompleteMe
项目地址:https://github.com/chxuan/vimplus git clone https://github.com/chxuan/vimplus.git ~/.vimplus cd ...
- 定制Eclipse的Content assist(代码补全),比如空格键不上屏
原文地址:http://www.blogjava.net/yes1983/archive/2010/12/15/Eclipse.html 以前只知道alt+/调出assist,后来发现可以所有字母都激 ...
- aixcoder 智能代码补全工具
1.官网下载 https://www.aixcoder.com/#/setting 1.1介绍 1.2选择对应的下载版本 1.3安装&注册(需关闭IDEA) 安装完进行手机/邮箱注册,下载对应 ...
- 代码补全_AI加持,Kite增加智能代码补全功能:减少一半操作,实时补全
代码补全工具 Kite 近日更新了最新的版本,增加了名为「Intelligent Snippets」的新功能.这一功能可以帮助开发者更为智能和高效的补全 Python 代码中的函数命令了. 机器之心报 ...
- hbuilderx代码自动补全_DL时代的代码补全利器,北大出品,效果远超语言模型
从程序员到数据工程师,编写程序代码是一项基本功,但是编写冗长代码的过程也极大地消耗了开发者的耐心.近来,有不少关于代码补全工具的消息爆出,例如,来自美国的 Kite,来自加拿大的 TabNine 等, ...
最新文章
- Python网络爬虫 - 一个简单的爬虫例子
- 关于:last-child的一点见解
- Android开发之ActionBar结合Fragment的导航功能的使用(源代码分享)
- Ubuntu14.04安装编译ffmpeg
- 阅读代码和修改别人代码的一些技巧以及注意事项
- JavaSE各阶段练习题----多线程-垃圾回收
- EF创建上下文对象HttpContext和CallContext
- Logistic Regression Classifier逻辑回归
- code iban 是有什么组成_EAN-128码和Code-128码的区别
- LeetCode 1245. 树的直径(图的最大直径结论)
- ISO27001标准的起源和发展
- Linux操作系统之常用快捷键汇集
- ubuntu编译tensorflow 支持AVX,AVX2等指令集
- centos查询php目录大小,Linux CentOS下找到大于10M 小于100M的文件列出来的命令
- 微信进入公众号提示服务器错误,微信登录公众号提示没有权限访问解决教程
- 15---TernaryOperator 三目运算符
- 机器学习进阶 day4
- alter table新增字段操作究竟有何影响?(上篇)
- 1024程序员节:向改变世界的程序员致敬
- [Linux 驱动] -- 驱动调试技巧点滴分享
热门文章
- 使用批处理实现mysql数据库备份与上传
- SQL2008安装后激活方式以及提示评估期已过解决方法(转)
- 享乐不尽 聚 VR一体机艳冠群雄
- 使用docker toolbox 在windows上搭建统一环境
- 安卓开发_求好评功能
- Tomcat遇到”Error listenerStart”或”Error filterStart”问题且无详细日志时的log配置...
- EqualLogic 6100 V6 Synchronous Replication
- 32.突然弹出很多IE窗口怎么办:
- Java线程:线程的调度-合并
- eBPF Tracing 入门教程与实例