状态栏显示“已保存”或“正在保存…”是最直接信号;更可靠的是通过命令面板打开Process Explorer,观察Extension Host进程CPU短时尖峰(>40%,200–800ms)来确认自动保存是否触发。

怎么看自动保存有没有真正在运行
状态栏右下角显示“已保存”或“正在保存…”是最直接信号。但更可靠的是打开命令面板(Ctrl+Shift+P),执行 Developer: Open Process Explorer,观察 Extension Host 进程的 CPU 和内存波动——当你敲完代码停顿后,若该进程出现短时 CPU 尖峰(>40%)且持续 200–800ms,大概率是 files.autoSave 触发了格式化或写盘逻辑。
为什么“正在保存…”卡住,其实是 formatOnSave 在等外部工具
editor.formatOnSave 是同步阻塞操作,VSCode 会卡在保存流程里,直到 Prettier、ESLint 等 CLI 工具返回结果。常见卡点包括:
-
npx prettier --write找不到本地prettier模块(报Cannot find module 'prettier') - 同时启用
esbenp.prettier-vscode和dbaeumer.vscode-eslint,且都设为默认格式化器,导致串行执行 -
formatOnSaveTimeout设得太小(如750),小文件也可能被截断 -
eslint.format.enable为true,让 ESLint 插件也抢着格式化
怎么验证格式化工具是否真能跑通
别信设置界面里的勾选框,终端才是真相。在项目根目录分别运行:
npx prettier --write src/index.ts --loglevel warn
npx eslint src/index.ts --fix-dry-run
如果任一命令报错或超时,VSCode 的自动保存就会卡在“正在保存…”。确认无误后,再回 VSCode 调整以下配置:
- 在
.vscode/settings.json中指定唯一默认格式化器:"editor.defaultFormatter": "esbenp.prettier-vscode" - 关掉 ESLint 的自动格式化:
"eslint.format.enable": false - 禁用全局查找:
"prettier.resolveGlobalModules": false - 把
formatOnSaveTimeout提高到3000以上
autoSave 模式选错,性能反而更差
files.autoSave 不是越频繁越好,错误模式会放大 I/O 压力和冲突风险:
-
"afterDelay":延迟保存最危险——你敲两行停顿 1.2 秒,它立刻落盘,可能把 Git 冲突标记存进去;狂敲 5 秒又完全不保存,断电即丢失 -
"onFocusChange":切出当前文件(比如点到终端)时保存——适合单文件专注编辑,防丢且不干扰节奏 -
"onWindowChange":整个窗口失焦(Alt+Tab切浏览器)时保存——适合多窗口并行但不想频繁写盘 - 绝对别设
"files.autoSaveDelay": 10000:等于主动留 10 秒空白期,崩溃即丢失
务必检查项目级 .vscode/settings.json 是否写了 "files.autoSave": "off"——它优先级高于用户设置,容易被忽略。











