Vim + Rust 折腾笔记

写在前面

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

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

前提条件:您已经通过 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

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


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

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

3)进入插件目录编译 ycmd

4)配置 .vimrc
(同上文 YCM + racerd 的配置,略)

5)修改 ycmd/rust-completer, 使其支持用户自己安装的 RLS


4. Vim + LanguageClient-neovim + RLS

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


5. 其他:

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注