Vim + Rust 折腾笔记

写在前面

都累死了,写个屁前言。。。

如果您只关心可复现、成功的靠谱解决方案,请跳转方案: 4. Vim + YCM + rust-analyzer

前提条件:您已经通过 rustup 安装了 nightly 版本的 toolchain


方案搭配

1. Vim + vim-racer + racer (不推荐

1)安装 vim-racer 插件
请使用您喜欢的任何 Vim 插件管理工具(Vundle、NeoBundle、vim-plug、Pathogen)进行安装;

2)通过 cargo 安装 racer

3)配置 .vimrc
(默认快捷键:先按 Ctrl-x 然后按 Ctrl-o)

存在的问题:

  • 代码补全基本能用,但是似乎不能像 YCM 那样自动触发补全,以及一些函数跳转功能依赖 rust.vim
  • autoload/racer.vim: system(cmd),每次补全都会执行一次 racer 命令,存在优化的空间,比如使用 racer daemon;

2. Vim + YCM + racerd (deprecated)

racerd 实际上是 racer 功能的封装,并通过 HTTP API 为 YCM 提供服务,基本已经停止维护;
YCM 起初对 Rust 的支持是通过 racerd 实现的,但是在2019年6月已经正式换用 RLS 作为后端;而当前 debian 源里的 ycmd 还是2018年的版本,因此不支持 RLS,仅支持 racerd (显然,debian 打包的 ycm 早晚会更新 :-)
参见:
Migrate Rust completer to Rust Language Server #1105
[READY] Migrate Rust completer to Rust Language Server #1224

1) 使用 APT 安装 ycmd 并安装 vim 插件

2)安装 rust-src 以及 racerd

2)配置 .vimrc

存在的问题:

  • YCM 应该直接调用 racer 二进制,而不是通过 TCP 和 racerd 通讯;
  • YCM 每次 TCP 通讯都是完整的三次握手,可以使用 TCP 长链接;
  • YCM 每次都会发送 vim 所有标签页的代码全文,对于 racer/racerd 是没有意义的;

3. Vim + YCM + RLS (deprecated)

Update@2021-05-28: 该来的还是来了,实际上 YCM 于2020年7~9月份即弃用了 RLS,转而使用 rust-analyzer
1)安装一些依赖以及工具

2)安装 ycm-core/YouCompleteMe 插件,请使用您喜欢的任何 Vim 插件管理工具安装

3)进入插件目录编译 ycmd

4)配置 .vimrc,自定义 toolchain 目录


4.1 Vim + YCM + rust-analyzer(debian 10)

Update@2021-05-28: 该方案于近期新添加,此时的 YCM 对于 cmake、vim 版本均有较新的要求,debian10 甚至无法满足,hack 如下

  • 手动修改 YCM 项目内的各个 CMakeLists.txt 绕过 cmake 版本检查, debian10 构建成功;
  • 构建(install.py)完成后,在 ycm 插件目录 git checkout legacy-vim 切换至历史分支,这样可兼容 Vim < 8.1.2269;
    (如果在构建之前就切换至 legacy-vim 分支,此时的 Rust 支持还是 RLS,这就是开倒车了,唉,心累 :(

1)安装一些依赖以及工具

2)安装 ycm-core/YouCompleteMe 插件,请使用您喜欢的任何 Vim 插件管理工具安装

3)进入插件目录构建 ycmd

4) 配置 .vimrc

4.2 Vim + YCM + rust-analyzer(debian 12)

Update@2023-09-06: 在 debian 12 系统中,默认的 vim、ycmd、vim-youcompleteme 等软件包可开箱即用,使用 vam 配置 vim-youcompleteme 插件即可,无需手动源码安装。

1)安装一些依赖以及工具

2)安装 ycm-core/YouCompleteMe 插件,这里使用 debian apt 源中的版本

3) 配置 .vimrc

5. Vim + LanguageClient-neovim + RLS

未测试该方案是否可行,略
参考:autozimu/LanguageClient-neovim


6. 其他:

最后贴一下YCM相关的 vimrc 配置, 主要是 C、Python、Rust 支持

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


The reCAPTCHA verification period has expired. Please reload the page.

*