rust-analyzer是唯一应启用的Rust插件,必须禁用rust-lang.rust;若无反应,先检查是否被VSCode静默禁用、PATH中cargo/rustc是否可用、项目是否以Cargo.toml为根目录打开、rust-src组件是否安装。

rust-analyzer 是唯一该装的插件,其他 Rust 相关插件(尤其是 rust-lang.rust)必须禁用,否则语法高亮、跳转、宏展开全部失效。
rust-analyzer 插件为什么没反应?
装完不等于启用——VSCode 常静默禁用它,尤其当旧 rust-lang.rust 插件还残留时。打开命令面板(Ctrl+Shift+P),搜 Extensions: Show Enabled Extensions,确认 rust-analyzer 状态是“已启用”。如果看到 rust-lang.rust,立刻禁用它。
常见错误现象:rust-analyzer 状态栏显示 (loading) 卡住、右键“Go to Definition”灰掉、#[derive(Debug)] 不补全。
- 检查是否在含
Cargo.toml的目录下打开项目(不是父文件夹,也不是单个.rs文件) - 终端里运行
cargo --version和rustc --version,必须有输出;若报command not found,说明$HOME/.cargo/bin(或 Windows 的%USERPROFILE%\.cargo\bin)没进 PATH - macOS 用户:从桌面图标启动 VSCode 会丢失 shell 环境变量,改用终端执行
code --new-window启动
rustc/cargo 找不到?PATH 和 toolchain 必须对齐
rust-analyzer 不自带编译器,它完全依赖系统 PATH 中可调用的 cargo 和 rustc。仅靠 rustup 安装还不够。
- 运行
rustup show,确认 active toolchain 显示为类似stable-x86_64-unknown-linux-gnu (default);若为(none),执行rustup default stable - Windows 用户若用 Scoop 安装 rustup,需手动把
%USERPROFILE%\scoop\shims加进系统 PATH - rust-src 组件必须安装:
rustup component add rust-src,否则跳转std::vec::Vec会失败,报Failed to load stdlib
项目级 .vscode/settings.json 怎么写?
全局设置容易跨项目冲突,尤其多人协作时。推荐在项目根目录建 .vscode/settings.json,内容如下:
{
"rust-analyzer.cargo.loadOutDirsFromCheck": true,
"rust-analyzer.procMacro.enable": true,
"rust-analyzer.checkOnSave.command": "check",
"rust-analyzer.cargo.watch": true
}
关键点解释:
-
"rust-analyzer.cargo.loadOutDirsFromCheck":让插件读取cargo check输出路径,否则build.rs生成的模块不可见 -
"rust-analyzer.procMacro.enable":开启宏展开,serde、sqlx、anyhow等 derive 宏才能被正确解析 -
"rust-analyzer.checkOnSave.command": "check":比clippy更轻量,避免保存卡顿 -
"rust-analyzer.cargo.watch":监听Cargo.toml变更并自动重载,加 dependency 后不用手动 Reload Workspace
“unresolved import”但 cargo build 成功?别乱删 target/
这是最常被忽略的坑:rust-analyzer 依赖 target/ 下的 rustc 编译产物构建语义索引。手动执行 rm -rf target/ 后,插件会大量报红,但终端 cargo check 仍能过。
- 开发中尽量避免彻底清空
target/;如真需要,用cargo clean更安全 - 出错后不要重启 VSCode,先点右下角
rust-analyzer→Reload Workspace - 若 workspace 有多个 crate,确保根
Cargo.toml含[workspace]块,且子 crate 的path = "crates/utils"是相对路径
cargo 是否真能被 VSCode 进程看见、rust-src 是否装了、target/ 是否被误删——这三处出问题,再新的 rust-analyzer 版本也救不回来。


















