rust-analyzer启动失败需先确认其是否真在path中:sublime lsp不继承shell配置,须在控制台执行import os; print(os.environ.get('path'))验证路径,缺失则手动添加绝对路径至lsp设置的"command"字段,并确保项目根含cargo.toml且语法设为rust。

rust-analyzer 启动失败?先确认它是不是真在 PATH 里
Sublime 的 LSP 插件调用 rust-analyzer 时,不会读你的 shell 配置(比如 ~/.zshrc),也不会展开 ~。哪怕终端里 rust-analyzer --version 能跑,Sublime 控制台里 import subprocess; subprocess.run(['rust-analyzer', '--version']) 报 FileNotFoundError,就是 PATH 没继承过去。
验证方式:按 Ctrl+` 打开 Sublime 控制台,执行:
import os; print(os.environ.get('PATH'))
检查输出里有没有 .cargo/bin(Linux/macOS)或 %USERPROFILE%.cargoin(Windows)。没有就补——Windows 必须加到「系统环境变量」,macOS/Linux 推荐从终端启动 Sublime:subl,而不是点图标。
- 别信
rustup component add rust-analyzer就万事大吉:某些 macOS 和 Linux 发行版会因权限或架构问题装不进 PATH,尤其 Apple Silicon 上常见 - 更稳的做法是去 GitHub releases 页面 下载对应平台的二进制,放进
/usr/local/bin(macOS/Linux)或C: ools(Windows),再在 LSP 设置里写绝对路径 - 如果用
rustup安装,实际路径通常是~/.rustup/toolchains/nightly-xxx/bin/rust-analyzer,不是~/.cargo/bin
LSP 设置里 "command" 字段怎么填才不报 spawn ENOENT
这个错误本质是 Sublime 找不到可执行文件。LSP 不支持 shell 别名、函数或相对路径,"command" 必须是数组形式,且每个元素都是完整路径或纯命令名(前提是 PATH 已生效)。
推荐配置(用户 Settings):
{
"clients": {
"rust-analyzer": {
"command": ["/home/username/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/rust-analyzer"],
"scopes": ["source.rust"],
"syntaxes": ["Packages/Rust/Rust.sublime-syntax"],
"languageId": "rust",
"initializationOptions": {
"cargo": {
"loadOutDirsFromCheck": true
},
"procMacro": {
"enable": true
}
}
}
}
}
-
"command"值必须是数组,不能是字符串;写成"command": "rust-analyzer"会静默失败 - Windows 用户注意路径分隔符和 .exe 后缀:
["C:\Users\username\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\bin\rust-analyzer.exe"]
- 如果想用 cargo run 启动(不推荐),得额外配
"env": {"RUSTUP_HOME": "/path/to/rustup"},否则跨 toolchain 时可能找不到依赖
为什么打开 Cargo.toml 目录后 LSP 还不工作?
LSP 插件只在 Cargo 项目根目录下稳定激活——也就是有 Cargo.toml 的那个文件夹。如果你只是打开了某个 .rs 文件,没把整个项目文件夹拖进 Sublime(即没设为 project folder),rust-analyzer 会降级为“无 workspace”模式,跳转、补全、宏展开基本失效。
- 正确做法:菜单
Project → Add Folder to Project…,选中含Cargo.toml的目录;或者直接把该目录拖进 Sublime 窗口 - 右下角状态栏显示
Rust是必要条件,但不是充分条件;即使语法对了,没 project folder,LSP 也只做基础语法解析 - 如果项目用了 workspace,确保
Cargo.toml在最外层,且rust-analyzer的initializationOptions.cargo.loadOutDirsFromCheck设为true,否则无法识别成员 crate
保存自动格式化失效?别只盯 rustfmt_on_save
RustEnhanced 的 "rustfmt_on_save": true 配置本身没问题,但真正决定它能不能跑的是 rustfmt_path 和当前文件是否被识别为 source.rust。
-
rustfmt_path必须写绝对路径,~/.cargo/bin/rustfmt会被忽略;Linux/macOS 示例:"/home/username/.cargo/bin/rustfmt",Windows 示例:"C:\Users\username\.cargo\bin\rustfmt.exe" - rustfmt 从 Rust 1.75+ 起不再随工具链默认安装,必须手动运行
cargo install rustfmt;装完后在终端验证rustfmt --version - 如果用了 LSP + rust-analyzer,建议关掉 RustEnhanced 的格式化,改用 LSP 的
formatOnSave(需在 LSP 用户设置里开),避免两个格式化器打架
最常被忽略的一点:rust-analyzer 的格式化能力依赖于 rustfmt 可执行文件存在,但它不关心你插件里怎么配——它只按自己规则调用,所以 PATH 或绝对路径缺一不可。











