官网:https://github.com/racer-rust/vim-racer
最大亮点就是支持定义跳转、rust-doc 跳转 。
racer-vim 的定位是 Rust code completion (代码补全)和 navigation (代码导航/跳转)。这两项功能 (coc-)rust-analyzer 都已经超越了 racer:
Rust:vim 环境配置
语雀内容

快捷键配置

racer 官网的推荐设置我都翻译在下面了,直接按需添加到配置文件。

  1. " === racer 设置 ===
  2. set hidden
  3. " 设置 racer 路径
  4. let g:racer_cmd = "/home/ubuntu/.cargo/bin/racer"
  5. " Racer 的补全方式和 (coc-)rust-analyzer 智能提示补全不太一样,使用的是 vim 的
  6. " Omni completion 补全方式,需要手动触发,快捷键是 <c-n> <c-o>
  7. " 并不推荐 vim-racer 的补全功能
  8. " 补全时展示完整的函数定义,比如参数和返回类型
  9. let g:racer_experimental_completer = 1
  10. " 补全时添加括号
  11. let g:racer_insert_paren = 1
  12. " 跳转定义快捷键,十分有用
  13. augroup Racer
  14. autocmd!
  15. autocmd FileType rust nmap <buffer> gd <Plug>(rust-def)
  16. autocmd FileType rust nmap <buffer> gs <Plug>(rust-def-split)
  17. autocmd FileType rust nmap <buffer> gx <Plug>(rust-def-vertical)
  18. autocmd FileType rust nmap <buffer> gt <Plug>(rust-def-tab)
  19. autocmd FileType rust nmap <buffer> <leader>gd <Plug>(rust-doc)
  20. autocmd FileType rust nmap <buffer> <leader>gD <Plug>(rust-doc-tab)
  21. augroup END

可以只设置关于跳转定义 (definition) 和文档 (doc) 的部分:

  1. " === racer 设置 ===
  2. set hidden
  3. " 设置 racer 路径
  4. let g:racer_cmd = "/home/ubuntu/.cargo/bin/racer"
  5. " 跳转定义快捷键,不建议设置 gt
  6. augroup Racer
  7. autocmd!
  8. autocmd FileType rust nmap <buffer> gd <Plug>(rust-def)
  9. autocmd FileType rust nmap <buffer> gx <Plug>(rust-def-vertical)
  10. autocmd FileType rust nmap <buffer> <leader>gd <Plug>(rust-doc)
  11. " autocmd FileType rust nmap <buffer> <leader>gD <Plug>(rust-doc-tab)
  12. augroup END

使用方法

在当前的脚本里,按 Esc 进入 normal 模式,光标移到变量、函数之类的单词上

  • gd 即可跳转到定义它们的位置,如果是被定义在别的文件,会暂时关闭当前文件窗口(不会保存原文件),打开新的缓冲区来显示跳转到的定义。
  • gx 会分割出左右窗口,左边是定义的地方,按 Ctrl+w+w 可以在两个窗口之间跳转,按 Ctrl+w+r 可以交换窗口位置,关闭哪个窗口就用 :q ( 或者 :close )命令

racer 跳转定义.gif

  • \gD 跳转到函数 doc 说明的新窗口。前提是 <leader> 键设置为 \

image.png

buffer 和 tab page

不建议使用 racer-vim - 图3

  • 关于 buffer (缓冲区)的一些操作:
    • 快捷键 Ctrl+^ 可以在这两个文件(缓冲区)中跳转
    • 命令 :bn:bnext 打开下一个缓冲区;命令 :bN:bNext 打开上一个缓冲区
    • 命令 :bfirst 打开第下一个缓冲区;命令 :blast 打开最后一个缓冲区
    • 命令 :bd:bdelete 删除当前缓冲区,也就是把当前文件从 vim 内存中移除,相当于关闭文件
    • 命令 :ls 列出缓冲区中打开的文件名称
  • 关于 tab page (标签页面)的一些操作:
    • 快捷键 gt 或命令 :tabnext 跳转到下一页面;快捷键 ngT 跳转第 n 个页面。注意 vim 的 tab 切换和 racer 提供的 rust-def-tab 设置冲突。
    • 快捷键 gT 或命令 :tabNext 跳转到上一页面
    • 命令 :tabclose 关闭当前页面;命令 :tabs 显示所有页面的文件名

参考:Vim 多文件编辑:缓冲区