Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师
21753 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
Vim 实用技巧必知必会
15
15
1.0x
00:00/00:00
登录|注册

13|YouCompleteMe:Vim 里的自动完成

Find references, definitions, parent classes, child classes, and call trees
Refactoring command available
Additional key mappings for auto-fix and navigation
<Tab> for completion
Global configuration
Project configuration
Manual: Requires CMake, Python 3, and C++ compiler
Ubuntu: sudo apt install vim-youcompleteme and vim-addon-manager install youcompleteme
Supports Vim's omnicomplete system for many other languages
Supports any other language with LSP server
Supports Java
Supports Rust
Supports JavaScript and TypeScript
Supports Go
Supports C#
Supports Python 2 and 3
Supports semantic code completion for C/C/Objective-C/Objective-C/CUDA
Multiple completion engines
Fast, on-the-fly, fuzzy search code completion
Explore RTags for C/C++ code navigation
Install and configure YouCompleteMe
RTags is useful for C/C++ code navigation when clangd engine is not available
YouCompleteMe provides comprehensive auto-completion for various languages in Vim
Usage:
Installation and project configuration
Client/server architecture using Unix domain sockets
Open-source tool for C/C++ code navigation
Usage:
Configuration:
Installation:
Features:
Supports various languages including C++, C, Python, Java, Go, JavaScript, TypeScript, Rust, and more
Provides interfaces for third-party software to implement auto-completion
Vim plugin for auto-completion
Exercises
Conclusion
RTags
YouCompleteMe
YouCompleteMe and RTags

该思维导图由 AI 生成,仅供参考

你好,我是吴咏炜。
在集成开发环境里,自动完成是一个非常重要的功能。可是 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/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Vim用户必备的YouCompleteMe(YCM)插件为Vim提供了快速、即输即查、模糊搜索的代码完成引擎,支持多种编程语言,并提供了多个基于不同语言的完成引擎。YCM的安装配置相对复杂,但功能强大,使用模糊匹配和智能提示,尤其在C++编程中展现出了出色的效果。全局配置和使用方法也得到了详细介绍,包括自动修正、跳转功能和重命名的重构等。另外,RTags是一个客户端/服务器端架构的程序,提供了一些特别的功能,适用于C族语言编程者。文章还提到了RTags的安装、运行和项目配置方法,以及使用示例。总的来说,本文介绍了YCM和RTags两款工具,为Vim用户提供了丰富的代码完成和代码导航功能,使其成为一款值得使用的工具。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Vim 实用技巧必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • doge
    说一下用后感吧,跳转的速度和精度上比vscode和clion要迅速很多,就是快捷键比较多,得多用熟能生巧才行。 另一个就是得ctags+cscope+YCM+rtags一起用才能得到最好的跳转体验。 基本就是C-] \gt \rj \rT轮番上阵,哈哈! 整体感觉还是非常良好的,不过如果CLion没那么卡和吃内存就好了,CLion的类继承关系这一块的体验很好,不知道vim这一块有没有类似的操作,另外CLion的调试也很适合小白使用。但Clion经常用着用着就卡死了,尴尬。 当然如果vim实在玩不转,vscode和CLion还是可以作为替代的,哈哈。 最后一点就是高亮配色方案的事,老师好像比较喜欢朴素的色调,但我看多色调习惯了,最后用了octol/vim-cpp-enhanced-highlight这个插件,但感觉还是挺一般的。不知道有没有大神有啥推荐的配置。

    作者回复: 无论如何,cscope没有使用的必要了吧,如果你用C++的话。如果用上编译数据库的话,YCM基本已经满足需求了。ctags和rtags勉强有部分补缺的作用,cscope我看不出来有啥用处。 类继承你是说查看有什么子类吗?这个在rtags里有,但如果要跟商业软件比界面的漂亮,那肯定是没戏的。 我试了你说的这个插件,还有点意思。但是,跟其他类似插件一样,单纯依赖名字的加亮,在C++里玩不转——把我的很普通的成员变量next都当成标准库里的函数名称来加亮了。 朴素点,不是为了朴素,而只是不愿看到错误行为时的无奈之举。如果有插件能进行完全正确的加亮,又不会拖慢编辑的速度,我干吗不用呢?;-)

    2020-09-03
    2
  • chris
    请问老师,我想给ycm的GoToSymbol命令也定义一个快捷键,但发现这个命令不是默认取当前光标下的符号,而是要自己输入带查找的symbol,这样的快捷键应该如何定义?

    作者回复: 这个命令本来就是设计用来输入符号的,如果是取光标下的符号,用 GoToDefinition 子命令不挺好? 如果是不想手工输入前面这串,可以类似这样定义: :nnoremap <Leader>gs :YcmCompleter GoToSymbol 这样,敲入 \gs 即可自动输入命令的前面部分。

    2020-11-07
    1
  • 凉人。
    /usr/bin/ld: /home/work/.vim/my/start/YouCompleteMe/third_party/ycmd/third_party/regex-build/3/temp.linux-x86_64-3.6/regex_3/_regex.o(.text+0x112c): unresolvable H��@�>H��FH��H��H��@�~�F�H��@�~H��8�H��H��0�FH��H��(�FH��H�� �FH��H���FH��H���FH��H��F�fD relocation against symbol `_Py_NoneStruct' 安装过程一直失败。看起来是mrab-regex有bug,这个可以跳过吗

    作者回复: 把环境搞干净了(没有自己的特殊环境变量)再试试。这种有问题就要到网站上去问问了。 如果是Linux发布版,一般可能已经自带了。虽然可能版本偏老,应该肯定能装上。

    2022-12-22归属地:江苏
  • 谁家内存泄露了
    请问老师,我安装了ycm,采用的是在ubuntu上直接用apt安装的方式; 在c++的工程中添加了对应的json文件; 现在的现象是函数/符号能够跳转了,但是无法查找相关的引用即没有这个命令:YcmCompleter GoToReferences,这个问题您有什么思路吗?

    作者回复: 我用过 Ubuntu 20.04,上面直接带的 YCM 版本比较老,是不支持这个功能的。自己安装新版本(需要自己运行 install.py 来安装 clangd)就可以。

    2022-09-21归属地:上海
    2
  • Qfeng
    公司内网无法访问网络,只能通过外网电脑下载好后拷贝的方式传输文件进入。这种情况下试过,无法安装YCM,它会在安装的时候访问github,请问老师这种问题可以如何绕过?

    作者回复: 拿同样环境的机器安装,然后把整个 .vim 目录复制过去。

    2022-09-18归属地:上海
  • 軟件賺硬幣
    老师好,我是Linux初学者。我的Ubuntu20.04下面运行了 sudo apt install vim-youcompleteme, vim-addon-manager install youcompleteme两行代码之后,然后用vim打开新文件,还是用不了ycm。显示NoExtraConfDetected: No .ycm_extra_conf.py file detected, so no compile flags are available…(后面字体看不到了,笔记本屏幕限制)

    作者回复: 请再仔细看看配置部分,我特地讲到了 .ycm_extra_conf.py 文件,及我为解决这个问题准备的 adah1972/ycmconf 插件。

    2021-05-29
  • supakito
    老师,感觉最近tabnine好像很火的样子,不知道和ycm相比,哪个更好用一些?

    作者回复: 没有比较。这个补全的方法不同,比较耗算力,而且对大项目是需要付费的,我没有尝试。 对于这类工具我持审慎怀疑:如果它真能预测得很好,那是不是说明代码中的重复有点多了? 不过,那只是个人没有使用过的瞎猜测。实践是检验真理的标准。你自己试试不就得了?适合自己的就是好的,适合你的不一定适合其他人,反过来也一样。

    2020-11-08
    2
  • 浩浩
    brew list. 安装了一下软件 ============================= autoconf cmake fzf gettext icu4c lua node pkg-config python@3.9 ruby universal-ctags automake cscope gdbm go libyaml macvim openssl@1.1 python@3.8 readline sqlite xz ycm 只加 clangd 选项以下报错 【我需要自己安装 clangd 吗,请问?】 ======================= Downloading Clangd from https://dl.bintray.com/ycm-core/clangd/clangd-10.0.0-x86_64-apple-darwin.tar.bz2... ERROR: downloaded Clangd archive does not match checksum.

    作者回复: 可能就是下载/网络出了问题。我目前试下来是可以成功的,clangd的URL跟你的完全相同。

    2020-10-25
  • gigglesun
    YouCompleteMe可以通过离线的方式安装吗? 公司的服务器不能连接外网,我可以在自己的电脑通过 git clone --recurse-submodules \ --shallow-submodules \ https://github.com/ycm-core/YouCompleteMe.git 装好后,把这个YouCompleteMe文件夹拷贝到公司服务器,然后我再额外的安装对应的语言引擎这样安装吗?

    作者回复: 在同样软件配置的机器上,使用git命令和安装命令,完全结束了(建议测试一下)再拷贝结果。 安装过程中也会下载东西的,所以不能在目标机上执行安装命令。

    2020-10-18
  • 瀚海星尘
    老师我这里 ubuntu 使用 apt install vim-youcompleteme 后,提示找不到引擎,估计是还需要单独安装,最后还是用了编译安装的方式。我也安装了 vim-autopairs,确实带来了很多困扰,最头痛的就是需要只输入一对的第一个符号的情况,每次输入都会自动输出两个,然后删除第二个又会自动把第一个给删除...看了老师的留言,果断把它删除了。������

    作者回复: 如果报的错是跟clang相关的话,可能是vim-youcompleteme没有正确地依赖到libclang1上。我在Ubuntu 20.04 LTS上碰到过,运行sudo apt install libclang1可以解决该问题。

    2020-10-11
    3
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部