Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师
新⼈⾸单¥19.9
2312 人已学习
课程目录
已更新 18 讲 / 共 24 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词|我们为什么要学 Vim?
免费
导读|池建强:Vim 就是四个字“唯快不破”
基础篇 (10讲)
01|各平台下的 Vim 安装方法:上路前准备好你的宝马
02|基本概念和基础命令:应对简单的编辑任务
03|更多常用命令:应对稍复杂的编辑任务
04|初步定制:让你的 Vim 更顺手
05|多文件打开与缓冲区:复制粘贴的正确姿势
06|窗口和标签页:修改、对比多个文件的正确姿势
07|正则表达式:实现文件内容的搜索和替换
08|基本编程支持:规避、解决编程时的常见问题
09|七大常用技巧:让编辑效率再上一个台阶
10|代码重构实验:在实战中提高编辑熟练度
提高篇 (3讲)
11|文本的细节:关于字符、编码、行你所需要知道的一切
12|语法加亮和配色方案:颜即正义
13|YouCompleteMe:Vim 里的自动完成
拓展篇 (3讲)
拓展1|纯文本编辑:使用 Vim 书写中英文文档
拓展 2|C 程序员的 Vim 工作环境:C 代码的搜索、提示和自动完成
拓展3|Python 程序员的 Vim 工作环境:完整的 Python 开发环境
Vim 实用技巧必知必会
15
15
1.0x
00:00/00:00
登录|注册

13|YouCompleteMe:Vim 里的自动完成

吴咏炜 2020-08-26
你好,我是吴咏炜。
在集成开发环境里,自动完成是一个非常重要的功能。可是 Vim 并不能真正理解你输入的代码,因此它自身无法提供自动完成的功能。不过,Vim 仍然提供了一些接口,允许第三方的软件实现这样的功能,并和 Vim 自身进行集成。YouCompleteMe(简称 YCM)就是这样的一个第三方软件,今天,我就为你详细介绍一下它。
YCM 对 C++ 程序员最为适合,它可以提供其他工具实现不了的功能。而且,它也适用于很多其他语言,包括 C 家族的各种语言和其他常用的语言,如 Python、Java 和 Go 等。即使在 YCM 不直接支持你使用的语言的时候,它仍然能通过标识符完成功能提供比没有 YCM(和其他语言支持插件)时更好的编辑体验。因此,我推荐你使用这个插件。

YouCompleteMe

功能简介

首先我来介绍一下 YCM 的基本功能吧。根据它的主页(我的翻译):
YouCompleteMe 是一个快速、即输即查、模糊搜索的 Vim 代码完成引擎。它实际上有好几个完成引擎:
 
一个基于标识符的引擎,可以在任何编程语言中工作
一个强大的基于 clangd 的引擎,可以为 C/C++/Objective-C/Objective-C++/CUDA(C 家族语言)提供原生的语义代码完成
一个基于 Jedi 的完成引擎,可以支持 Python 2 和 3
一个基于 OmniSharp-Roslyn 的完成引擎,用来支持 C#
一个基于 Gopls 的完成引擎,支持 Go
一个基于 TSServer 的完成引擎,支持 JavaScript 和 TypeScript
一个基于 rls 的完成引擎,支持 Rust
一个基于 jdt.ls 的完成引擎,支持 Java
一个通用的语言服务器协议(LSP)实现,用来支持任何其他有 LSP 服务器的语言
还有一个基于 omnifunc 的完成器,使用 Vim 的全能补全(omnicomplete)系统提供的数据来为很多其他语言提供语义完成
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Vim 实用技巧必知必会》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(4)

  • YouCompleteMe
    老师,我有两个疑问:
    1.截图里是否使用了statusline的插件,我的用了老师的配置,没有显示 [+] / utf-8 / 当前行百分比。
    2.老师平时写代码会使用括号自动补全吗~

    作者回复: 1. 不是插件,就是手工设置了 statusline。没讲这个是因为大部分人应该会去使用 Airline(后面会讲),大概不会手工设了。现在手机上看不了当前配置,应该就是 http://wyw.dcweb.cn/vim/_vimrc.html 的样子加上 fugitive 提供的 Git 信息。

    2. 括号补全是个看似很小、实际很复杂的功能。你希望它很自动,同时又希望可以盲打,还能不影响删除之类的操作,都做好不容易。前不久我看到一个看似不错的补全插件,都已经写了一段推荐文字了,结果在编辑某段 Vim 脚本时发现会导致我根本无法删除我想要删除的部分。那就卸载了。不好用的功能不如不用。

    2020-08-26
  • know-one
    请问python有没有哪个插件能显示继承关系?

    作者回复: 这个我不知道(Python写对象继承似乎都很少)。看看有没有其他同学知道吧。

    2020-08-26
  • return
    ycm确实难装,以前总想着通过插件方式来装, 今天才知道 其中的原理。
    2020-08-26
  • 我来也
    有些功能确实很吸引人。
    比如自动补全时自动用正则过滤候选词。

    曾经我也折腾过ycm,但由于有些东西不会用,自己没调通,最终也放弃了。
    要是能早些看到这篇文章,应该会少走不少弯路。

    对于老师说的这个重构变量名需要手敲的问题,
    :YcmCompleter RefactorRename bar
    在golang中有个小插件解决了这个问题,
    它是用快捷键在命令行触发一个提示框,告知你想把当前光标下的变量重命名为啥,等你输入完毕按回车后再替换。

    这个功能实现起来应该也不复杂。
    如果这个重构功能还蛮常用的话,可以折腾一下。

    作者回复: 又最快。😄

    如果重命名常用的话,也可以自己定义个短命令,如:

    :command -nargs=1 RR YcmCompleter RefactorRename <args>

    2020-08-26
    1
收起评论
4
返回
顶部