根本原因是rust-analyzer未正确安装或路径未识别、项目无cargo.toml、initializationoptions与settings配置混淆、格式化依赖缺失或workspace未加载;需依次检查安装、路径、cargo.toml、配置位置、cargo-fmt组件及日志中的“loaded workspace”信息。

rust-analyzer 服务没启动,lsp-rust-analyzer 插件报错“server crashed”
根本原因通常是 rust-analyzer 可执行文件未正确安装或路径未被识别。Sublime LSP 不会自动下载它,必须手动准备。
- 用
rustup component add rust-analyzer安装(推荐),完成后rust-analyzer --version能正常输出 - 若用二进制手动安装,需确保其在系统
$PATH中,或在 Sublime 的LSP-rust-analyzer.sublime-settings中显式配置"command"路径,例如:"command": ["/home/you/.cargo/bin/rust-analyzer"]
- 检查项目根目录是否存在
Cargo.toml—— 没有它,rust-analyzer启动后会立刻退出,LSP 插件日志里显示server crashed但实际是“无项目可服务”
配置文件里 "settings" 和 "initializationOptions" 到底填哪边
这是最常配错的地方:LSP 协议规定,客户端(即 Sublime 的 LSP 插件)把 "initializationOptions" 发给服务器(rust-analyzer),而 "settings" 是发给 LSP 插件自身的控制参数。
-
"initializationOptions"里放 rust-analyzer 特有的配置,比如:"initializationOptions": { "cargo": { "loadOutDirsFromCheck": true }, "procMacro": { "enable": true } } -
"settings"仅用于 LSP 插件行为,例如:"settings": { "lsp_format_on_save": true, "show_diagnostics_in_view_status": true } - 混淆这两者会导致配置无效——比如把
"procMacro.enable"放进"settings",rust-analyzer 根本收不到
保存时格式化不生效,或提示 "No formatting provider"
rust-analyzer 默认支持格式化,但 Sublime 需要明确启用,并且不能和 RustFmt 插件冲突。
- 确认
LSP-rust-analyzer配置中启用了"lsp_format_on_save"(在"settings"下) - 禁用其他 Rust 格式化插件,如
RustFmt或sublime-rust的内置格式化,它们会抢占on_post_save事件 - rust-analyzer 格式化依赖
cargo fmt,确保项目能运行cargo fmt -- --help;若失败,可能是cargo-fmt组件未安装:rustup component add rustfmt - 格式化触发时机是保存(
on_save),不是键入,别误以为实时生效
跳转定义/补全卡顿、响应慢,或只对 std 内容有效
典型表现是能跳到 std::vec::Vec,但点不开自己 crate 里的 struct。本质是 rust-analyzer 没加载 workspace 正确。
- 确保打开的是 Cargo workspace 根目录(含
Cargo.toml),而不是某个子 crate 的文件夹 - 检查
rust-analyzer日志(通过LSP: Toggle Log Panel)是否有"Failed to load workspace"或"missing Cargo.toml" - 若用
rust-analyzernightly,某些版本对 workspace 解析有 bug,降级到稳定版更稳(rustup override set stable) - 大型 workspace 可加
"cargo": { "allFeatures": true }到initializationOptions,否则部分 feature-gated 代码不索引
Sublime 上的 rust-analyzer 真正难调的不是配置项本身,而是服务是否真正加载了你的 workspace —— 所有功能异常,90% 都该先看日志里有没有 "Loaded workspace with N packages" 这行。











