VSCode默认不自动保存,必须将files.autoSave设为"off"/"afterDelay"/"onFocusChange"/"onWindowChange"之一;设true、1等非法值会被忽略,且需同步配置files.autoSaveDelay(afterDelay模式)、排查工作区覆盖、语言专属设置及格式化插件干扰。

VSCode 默认不自动保存,必须显式配置 files.autoSave 为合法字符串值才生效;设成 true、1 或留空都会被忽略,看起来像“没反应”。
直接改 settings.json 最快且不易被覆盖
快捷键 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入并选择 Preferences: Open Settings (JSON),在花括号内加两行:
{
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 800
}
保存即生效。不推荐用 GUI 设置界面——它容易被工作区 .vscode/settings.json 覆盖,而你可能根本没注意到右下角显示着「工作区」。
选 afterDelay 还是 onFocusChange?看场景
二者手感差异明显,不是“哪个更好”,而是“哪个不打断你”:
-
afterDelay:适合连续编码。停笔约 0.8 秒后保存,既防丢内容,又避免敲if时每输一个字母都刷盘 -
onFocusChange:适合写配置、查文档、切终端频繁的场景。点一下终端就保存,但如果你习惯用鼠标点侧边栏或资源管理器,会意外触发保存 -
onWindowChange不推荐:系统弹窗、微信浮窗、甚至 Windows 通知都会让它误触发,不稳定
为什么改了却没保存?优先检查这三处
自动保存“失效”90% 是因为配置被更高优先级规则覆盖或拦截:
- 右下角是否显示「工作区」?如果是,打开项目根目录下的
.vscode/settings.json,确认里面没写"files.autoSave": "off" - 语言专属设置是否关掉了?比如你在
settings.json里写了"[json]": { "files.autoSave": "off" },那所有.json文件都不会自动保存 - 开了
editor.formatOnSave但格式化失败(如 Prettier 缺配置、ESLint 未安装)?VSCode 会静默取消本次保存,文件状态仍是“已修改”但磁盘没更新
别忘了排除构建产物目录
自动保存不会判断“这个文件不该写”,它照单全收。前端项目里反复保存 dist/ 会不停触发 Webpack/HMR;Python 里保存 __pycache__/ 可能导致 Git 脏提交。在 settings.json 中加:
"files.autoSaveExclude": [ "**/dist/**", "**/build/**", "**/__pycache__/**", "**/*.pyc" ]
路径必须用 /,支持 glob;多根工作区建议写在工作区 .vscode/settings.json 里,避免污染全局。
真正容易被忽略的是:自动保存只对“已修改但未保存”的文件起作用——如果文件刚被 Git 恢复、或从磁盘外被其他程序改过,VSCode 认为它“已同步”,就不会再自动保存。这种情况下,得手动按一次 Ctrl+S 打开修改状态。


















