必须安装 rust-analyzer 并禁用 rust-lang.rust 插件,否则仅剩语法高亮;需从 VS Code 商店认准 matklad 发布的蓝色原子图标插件,装后启用它并禁用旧 Rust 插件;若卡在 “Loading…”,大概率是 cargo/rustc 路径未继承,须通过终端验证版本并确保 rustup default 设置正确;项目必须打开含 Cargo.toml 的根目录,多 crate workspace 需配置正确 workspace 块;首次加载需等待进度条完成;性能问题可通过调整 loadOutDirsFromCheck、checkOnSave.command、procMacro.enable 及排除 target 目录优化;rust-analyzer 仅为语言服务器,不负责运行或调试。

必须装 rust-analyzer,其他 Rust 插件(尤其是 rust-lang.rust)要禁用——装错或共存,VSCode 就只剩语法高亮,连 String 都会标红。
rust-analyzer 插件怎么装才对
VS Code 商店搜 “rust-analyzer”,认准作者是 matklad、图标为蓝色原子结构的那个;别点排第一的 “Rust”(ID rust-lang.rust),它早已归档,走的是淘汰的 RLS 协议,和 rust-analyzer 冲突后会导致跳转失效、补全卡死、状态栏卡在 “Loading…”。
装完立刻做两件事:
- 按
Ctrl+Shift+P→ 输入Extensions: Show Enabled Extensions,确认rust-analyzer状态是“已启用” - 找到
Rust(作者rust-lang)并禁用它——哪怕只留着没启用,也可能静默干扰
为什么 rust-analyzer 总是卡在 “Loading…”
90% 是因为 VS Code 没继承到 cargo 和 rustc 的路径。它启动时第一件事就是跑 cargo metadata,命令都找不到,自然起不来。
验证方式:在 VS Code 集成终端(Ctrl+`)里执行:
cargo --version<br>rustc --version
两个都必须有输出。如果失败:
- macOS/Linux:别从桌面图标启动 VS Code,改用终端执行
code --new-window . - Windows:检查系统环境变量是否含
%USERPROFILE%\.cargo\bin;用 Scoop 安装的,还得加%USERPROFILE%\scoop\shims - 所有平台:确保
rustup show至少有一个 toolchain 标记为(default),否则运行rustup default stable
rust-analyzer 启动后还是不跳转、不补全
不是插件问题,是项目没被识别为 Cargo 工作区。rust-analyzer 不会向上递归找 Cargo.toml,只认你当前打开的文件夹下有没有它。
常见踩坑点:
- 打开了
my-project/src或my-project/crates/utils这类子目录,但Cargo.toml其实在my-project/—— 应该打开最外层含Cargo.toml的目录 - 多 crate workspace 项目,根目录
Cargo.toml缺[workspace]块,或子 crate 的path写错,导致 rust-analyzer 把每个 crate 当孤立项目处理 - 刚新建项目,右下角进度条还没走完就急着点跳转——首次加载要跑
cargo metadata --no-deps,等几秒再操作
rust-analyzer 吃内存、CPU 100%、编辑卡顿
默认配置会索引全部依赖源码(包括 std 和第三方 crate),对小项目是浪费,对老机器或大 workspace 很容易拖垮体验。
关键调优项(在 VS Code 设置里搜):
-
rust-analyzer.cargo.loadOutDirsFromCheck设为true:让插件从cargo check输出反推构建路径,避免因权限或路径异常导致解析失败(但会略慢) -
rust-analyzer.checkOnSave.command设为check(不是clippy):保存时不阻塞编辑,后台异步检查 -
rust-analyzer.procMacro.enable只在真用#[derive]或sqlx::query!这类宏时才开;开了但不用,反而增加启动负担 - 在
.code-workspace或用户设置里加"files.watcherExclude": { "**/target/**": true }:防止它监控庞大的构建产物目录
真正容易被忽略的是:rust-analyzer 从不运行代码,也不参与调试;cargo run 要自己敲终端,调试要配 CodeLLDB 和 launch.json——把它当语言服务器用,别指望它干构建器或调试器的活。


















