必须用lsp插件+rust-analyzer组合;仅装rust enhanced或配cargo构建系统无法实现补全、跳转、类型提示和实时诊断,因lsp不继承shell path、语法必须设为rust、rust-analyzer路径须绝对且initializationoptions缺一不可。

Sublime Text 要实现 Rust 的代码补全、跳转定义、类型提示和实时诊断,必须用 LSP 插件 + rust-analyzer 语言服务器组合;只装 Rust Enhanced 或仅配置 cargo 构建系统,补全和 hover 提示根本不会出现。
rust-analyzer 二进制路径必须显式写死,不能依赖 PATH
Sublime 的 LSP 客户端不继承 shell 的 PATH,尤其从 Dock 或桌面图标启动 macOS 版时,PATH 基本只剩 /usr/bin:/bin。哪怕终端里 rust-analyzer --version 能跑,LSP 启动仍会报 spawn ENOENT 或静默失败。
- 用
rustup component add rust-analyzer安装后,查真实路径:rustup which rust-analyzer(Linux/macOS)或rustup which rust-analyzer.exe(Windows) - Windows 用户注意:路径含空格(如
C:\Users\Name\.rustup\toolchains\stable-x86_64-pc-windows-msvc\bin\rust-analyzer.exe)会导致启动失败,建议复制到不含空格路径如%USERPROFILE%\bin\rust-analyzer.exe - 配置中
"command"字段必须是绝对路径,~不展开,"rust-analyzer"这种相对写法几乎一定失效
LSP 设置里 initializationOptions 缺一不可
只配 command 和 scopes,rust-analyzer 能连上,但 Cargo 项目结构识别不了,use 导入标红、goto definition 失败、补全列表为空——这是因初始化参数没传够。
-
"cargo.loadOutDirsFromCheck": true必须启用,否则cargo check输出的 target 目录不被索引,符号解析延迟甚至完全缺失 -
"procMacro.enable": true要打开,不然#[derive(Debug)]、serde等宏生成的代码无法跳转或补全 -
"languageId"必须是"rust",不是"Rust"或"rust-lang";大小写敏感,错一个字母 LSP 就不绑定
语法高亮没识别成 Rust,LSP 根本不触发
右下角状态栏显示 Plain Text 或 Text,哪怕 rust-analyzer 路径全对、配置全齐,LSP 也不会加载——因为 LSP 插件靠 scopes 匹配文件类型,而 scope 来自语法高亮引擎。
- 点击右下角文本 → 选
Rust(不是RustEnhanced或Rust (Cargo));若没这个选项,说明Rust语法包未加载,重装官方Rust插件(Package Control 搜Rust),别用RustEnhanced替代 -
"syntaxes"配置必须是"Packages/Rust/Rust.sublime-syntax",旧版插件路径可能是Packages/RustEnhanced/RustEnhanced.sublime-syntax,不匹配就失效 - 新建
main.rs后务必保存(未保存文件默认是Plain Text),再手动选一次Rust
打开项目必须是 Cargo 根目录,且含 Cargo.toml
LSP 启动后显示 No workspace folder 或所有符号灰色不可点,大概率是 Sublime 打开方式不对——它不支持单文件模式下的完整 Rust 语义分析。
- 不要双击打开单个
.rs文件;要用File → Open Folder…打开含Cargo.toml的目录 - 如果项目嵌套多层(如
workspace/Cargo.toml),确保打开的是workspace目录,不是其父目录 - 首次打开时状态栏应出现
LSP: rust-analyzer,且控制台(Ctrl+`)里有initializing…日志;若几秒后消失,检查Cargo.toml是否语法错误或[package]缺失
最容易被忽略的是:rust-analyzer 启动成功 ≠ 功能可用;它可能连上了,但因 loadOutDirsFromCheck 关闭或工作区非 Cargo 根目录,导致所有跳转和补全都“看起来像没反应”。验证是否真生效,直接在 main.rs 里写 std::env::,看能否弹出完整方法列表——不行就回头检查 initializationOptions 和打开方式。











