必须手动下载rust-analyzer二进制、在lsp设置中写死绝对路径、确保syntax scopes与右下角显示的rust语法严格匹配;三者缺一,补全/跳转即失效。

Sublime Text 要用上 rust-analyzer,必须手动下载二进制、写死绝对路径、配对 syntax scopes,缺一不可——插件装得再全,这三步错一步,补全/跳转就灰掉。
rust-analyzer 二进制不能靠 cargo install 或 rustup add
从 Rust 1.75+ 起,cargo install rust-analyzer 已废弃,执行后生成的是空 stub;rustup component add rust-analyzer 在 macOS 和部分 Linux 上常静默失败(权限、签名或架构不匹配)。LSP 插件调用时直接报 spawn ENOENT 或日志里只显示 client not started。
- 去 rust-lang/rust-analyzer/releases 下载对应平台的压缩包(如
rust-analyzer-x86_64-unknown-linux-gnu.gz、rust-analyzer-aarch64-apple-darwin.gz、rust-analyzer-x86_64-pc-windows-msvc.zip) - 解压后得到单个可执行文件:
rust-analyzer(Linux/macOS)或rust-analyzer.exe(Windows) - 放进固定路径:
/home/username/.cargo/bin/rust-analyzer(Linux)、/usr/local/bin/rust-analyzer(macOS)、C:/Users/username/.cargo/bin/rust-analyzer.exe(Windows) - 终端运行
rust-analyzer --version验证能执行;如果失败,说明路径没加进系统 PATH,但没关系——下一步绕过它
LSP 设置里 command 必须写绝对路径,不能只写 "rust-analyzer"
Sublime 的 LSP 插件不继承 shell 的 PATH,尤其 macOS 从 Dock 启动、Windows 未重启 Sublime 时,PATH 基本只有 /usr/bin:/bin。写 "command": ["rust-analyzer"] 看似简洁,实际永远找不到。
- 打开
Preferences → Package Settings → LSP → Settings - 在用户配置中填完整路径(注意 Windows 反斜杠要双写或改用正斜杠):
{
"clients": {
"rust-analyzer": {
"command": ["/home/username/.cargo/bin/rust-analyzer"],
"enabled": true,
"initializationOptions": {
"cargo": { "loadOutDirsFromCheck": true },
"procMacro": { "enable": true }
},
"languages": [{
"languageId": "rust",
"scopes": ["source.rust"],
"syntaxes": ["Packages/Rust/Rust.sublime-syntax"]
}]
}
}
}
-
initializationOptions是发给 rust-analyzer 服务器的配置,不是 LSP 插件自己的设置;把procMacro.enable错塞进settings里,macro 补全就永远不会亮 -
syntaxes必须和你当前 .rs 文件右下角显示的语法名严格一致;如果点状态栏选的是RustEnhanced,这里就得写Packages/RustEnhanced/RustEnhanced.sublime-syntax,否则 LSP 根本不启动
项目必须以 Cargo.toml 所在目录为根,且需手动 Open Folder
rust-analyzer 不会自动向上扫描找 Cargo.toml。如果你只是用 File → Open File... 打开单个 .rs 文件,服务启动后立刻退出,LSP 日志里只显示 server crashed,实际是 “no workspace to load”。
- 确保项目根目录存在
Cargo.toml - 必须用
Project → Open Folder...(不是 Open File),让 Sublime 加载整个文件夹为 workspace - 打开后看 LSP 控制台(
Ctrl+`)是否有Loaded workspace日志;没有就说明没识别到 cargo 项目 - 如果项目嵌套(如 monorepo 里多个 crate),rust-analyzer 默认只加载第一个
Cargo.toml;需要手动在initializationOptions.cargo里加"allFeatures": true或指定"targetDir"
格式化失效?先关掉 RustFmt 插件,再查 rustfmt_path
rust-analyzer 自带格式化能力,但 Sublime 需要明确启用,且不能和旧插件冲突。常见现象是保存后没反应,或控制台报 No formatting provider。
- 禁用所有其他 Rust 格式化插件:
RustFmt、sublime-rust的内置格式化、甚至RustEnhanced的rustfmt_on_save - 在 LSP 的
settings(不是initializationOptions)里启用:
"settings": {
"lsp_format_on_save": true,
"show_diagnostics_in_view_status": true
}
- rust-analyzer 格式化底层依赖
cargo fmt;运行cargo fmt -- --help验证是否可用,若失败则执行rustup component add rustfmt -
rustfmt_path如果用在 RustEnhanced 里,必须写绝对路径:/home/username/.cargo/bin/rustfmt,不能写~/.cargo/bin/rustfmt(Sublime 不展开~)
最容易被忽略的是:rust-analyzer 的 procMacro.enable 和 loadOutDirsFromCheck 必须同时开启,否则 macro 展开、#[derive(...)] 提示、async 块类型推导都会失效——这些不是延迟加载,而是服务启动时就决定的能力边界。











