rust-analyzer 的增量索引缓存位于用户主目录下的 ~/.cache/rust-analyzer(linux/macos)或 %localappdata%\rust-analyzer\cache(windows),包含 crate 中间表示、语法树快照和跨 crate 类型引用索引,清理前须关闭所有 vscode 窗口以避免索引损坏。

rust-analyzer 的增量索引缓存存在哪?
它不存于 VSCode 自身目录,而是由 rust-analyzer 独立管理,在用户主目录下的 ~/.cache/ra/(Linux/macOS)或 %LOCALAPPDATA%\rust-analyzer\(Windows)中。这个目录不是 VSCode 的 Cache 或 Extensions,删错地方完全没用。
该缓存包含:crate 解析中间表示(.ra_cache)、语法树快照、跨 crate 类型引用索引。项目越多、依赖越深,这里增长越快——一个 Tauri 项目反复改 Cargo.toml 后,ra_cache 可达 8–12 GB。
- Windows 路径示例:
%LOCALAPPDATA%\rust-analyzer\cache - macOS 路径示例:
~/Library/Caches/rust-analyzer - Linux 路径示例:
~/.cache/rust-analyzer
怎么安全清理 rust-analyzer 缓存而不丢配置?
必须先关闭所有 VSCode 窗口,再清理。因为 rust-analyzer 进程(常驻在后台)会锁住缓存文件,强行删除可能损坏索引一致性,导致下次启动卡死或反复重建。
清理后首次打开项目会慢(需重建索引),但 settings.json、插件启用状态、工作区配置全都不受影响。
- Windows(PowerShell):
Remove-Item "$env:LOCALAPPDATA\rust-analyzer\cache" -Recurse -Force - macOS/Linux:
rm -rf ~/.cache/rust-analyzer - 不想全删?进
cache目录按修改时间排序,删掉半年前的子目录(命名含时间戳,如2025-09-12T14:22:31Z)
如何让 rust-analyzer 少建缓存?
rust-analyzer 默认对整个打开文件夹做全量索引,但多数 Rust 项目真正需要分析的只是当前 workspace 成员。靠 rust-analyzer.cacheDir 配置不能限制大小,真正有效的是缩小作用域。
在项目根目录的 .vscode/settings.json 中加:
{
"rust-analyzer.cargo.loadOutDirsFromCheck": true,
"rust-analyzer.procMacro.enable": false,
"rust-analyzer.cargo.extraArgs": ["--workspace"],
"rust-analyzer.cargo.features": ["default"]
}
关键点:
-
"--workspace"强制只加载 workspace 内 crate,跳过target/、examples/和未声明的依赖源码 -
"procMacro.enable": false关闭过程宏展开(占内存大头之一),除非你真在写 proc-macro -
"loadOutDirsFromCheck": true让 RA 复用cargo check的输出路径,避免重复解析
为什么删完又涨得飞快?
常见原因不是缓存没清干净,而是 files.watcherExclude 没配对,或者 rust-analyzer 被迫监听了不该看的目录。比如:
-
"**/target/**": true漏了——target/下有大量编译产物和临时 crate,RA 会尝试索引它们 -
"**/node_modules/**": true写成"**/node_modules": true(缺尾部/**)——VSCode 忽略该规则 - 用了 pnpm?漏掉
"**/node_modules/.pnpm/**": true,.pnpm 下的软链接会让 RA 递归遍历所有依赖
这些监听行为不会直接写进 ra_cache,但会让 rust-analyzer 持续扫描、预加载、缓存元数据,最终表现为缓存目录高频重建、体积失控。











