files.autoSave仅支持"off"、"afterDelay"、"onFocusChange"、"onWindowChange"四个字符串值,设true/1等会被静默忽略;afterDelay必须同步配置files.autoSaveDelay(毫秒),onFocusChange监听标签页失焦,onWindowChange监听窗口失焦,且工作区与语言专属设置会覆盖全局配置。

files.autoSave 只能设成这四个字符串值
VSCode 的自动保存不是开关,files.autoSave 是严格枚举字段,只接受 "off"、"afterDelay"、"onFocusChange"、"onWindowChange" 四个字符串值。设成 true、1 或 "true" 都会被静默忽略——看起来开了,其实没生效。
图形界面里点下拉菜单选模式,本质就是往 settings.json 写其中一项;手动编辑时务必核对引号和拼写,少一个双引号或大小写错(比如 "onfocuschange")都会让配置失效。
afterDelay 模式必须配 files.autoSaveDelay
选 "afterDelay" 却没反应?八成是漏了配套参数 files.autoSaveDelay。它单位是毫秒,不设或设为 0 会导致行为异常:要么立刻高频刷盘卡顿,要么干脆不触发保存。
-
"files.autoSaveDelay": 1000是较稳妥的起点(1 秒停顿后保存) - 调低到
500适合手速快、改完就切走的人;调高到2000可避免思考中途误存 - 远程开发(如 WSL)下实际延迟可能浮动 +300ms,建议把值设得稍宽松些
onFocusChange 和 onWindowChange 触发逻辑完全不同
这两个名字容易混淆,但监听层级差一级:onFocusChange 监听的是「当前编辑器标签页」,onWindowChange 监听的是「整个 VSCode 窗口」。
-
onFocusChange下,点终端、切另一个 .ts 文件、甚至点击资源管理器侧边栏 → 当前文件立即保存 -
onWindowChange下,只有 Alt+Tab 切到浏览器、微信浮窗盖住 VSCode、系统通知弹出 → 才会保存;在 VSCode 内部切换标签页完全不触发 - 多 VSCode 窗口共存时,
onWindowChange可能漏掉某个窗口的失焦事件,稳定性不如onFocusChange
语言专属设置和工作区设置会覆盖全局
你全局设了 "afterDelay",但某个 .md 文件死活不自动存?大概率被语言专属配置或工作区设置劫持了。
- 检查右下角状态栏是否显示「工作区」——如果是,打开项目根目录下的
.vscode/settings.json,确认没写"files.autoSave": "off" - 用
Cmd+Shift+P→Preferences: Configure Language Specific Settings查看[markdown]、[json]等块里是否单独关了自动保存 - 某些插件(如 Prettier)开启
editor.formatOnSave后,若格式化失败(缺配置、语法错),VSCode 会静默放弃本次保存,看起来像“没存”
真正起效的配置,永远是优先级最高且未被插件拦截的那一层。别只改用户设置,顺手扫一眼工作区和语言块。











