Sublime Text 需通过 LSP 插件 + rust-analyzer 才支持 Rust 语义重命名;必须配置正确、项目含 Cargo.toml、状态栏显示 Rust、LSP 日志确认连接成功,并绑定 "lsp_symbol_rename" 命令,且重命名后需手动验证和 cargo check。

Sublime Text 本身不支持 Rust 语义重命名
Sublime Text 没有内置的 Rust 符号解析能力,Ctrl+Shift+R 或 F2 默认不会触发 Rust 重命名——它只是个空命令,除非你装了能连上 rust-analyzer 的语言服务器插件。没配好 LSP,按烂快捷键也只会光标闪一下,或者弹出“no rename available”提示。
必须用 LSP 插件 + rust-analyzer 才能真正重命名
仅靠 Sublime 原生功能或 SublimeJ 等老插件,对 Rust 无效。可靠路径只有一条:安装 LSP 插件 + 正确配置 rust-analyzer 二进制,并确保项目根目录含 Cargo.toml。
- 用
Package Control: Install Package装LSP和LSP-rust-analyzer(后者会自动拉取rust-analyzer) - 打开项目根目录(不是某个 .rs 文件),让 LSP 自动识别为 Rust 工作区
- 右下角状态栏显示
Rust(不是Plain Text或SourceRust)才算就绪 - 确认
LSP: Show log中出现connected to rust-analyzer,而非卡在starting...
给 LSP: Rename 绑定快捷键要绕过默认冲突
默认 Ctrl+Shift+R 在 Sublime 里是“替换”,不是重命名。你得手动覆盖它,且不能直接写 "command": "lsp_rename"——LSP 插件实际命令名是 "lsp_symbol_rename"(注意下划线,不是驼峰)。
- 打开
Preferences → Key Bindings,编辑右侧User.sublime-keymap - 加这条(JSON 数组内):
[{"keys": ["ctrl+shift+r"], "command": "lsp_symbol_rename"}] - 务必检查 JSON 格式:方括号包裹、逗号不冗余、引号全英文、无中文标点
- 如果按了没反应,打开控制台输
sublime.log_commands(True),再按一次快捷键,看是否输出command: lsp_symbol_rename
重命名前必须手动验证作用域和引用
Rust 的所有权、生命周期、宏展开会让重命名更脆弱。LSP 即便连上了,也可能漏掉 macro_rules! 生成的标识符,或跨 crate 的 pub use 别名。
- 光标停在变量/函数名上后,先按
Ctrl+Shift+P输入LSP: Rename看是否可选——这是比快捷键更稳的触发方式 - 改名后,立刻跑
cargo check,别信 LSP 的“已更新”提示 - 特别注意
use语句、mod声明、#[derive(...)]里的类型名,这些常被 LSP 忽略 - 如果项目用了
proc-macro,重命名基本不可靠,得靠全局grep -r手动扫
Rust 重构的难点不在快捷键绑定,而在于 LSP 初始化是否真成功、rust-analyzer 是否索引完整、以及宏和跨 crate 引用这类 Sublime 无法静态分析的部分——这些地方永远需要人工兜底。











