VSCode默认不自动保存,必须将files.autoSave设为"off"/"afterDelay"/"onFocusChange"/"onWindowChange"之一;设为true、1等非法值会被忽略,工作区设置、语言专属配置或格式化插件失败均可能导致失效。

VSCode 默认完全不自动保存,所谓“没生效”,八成是根本没配对模式,或者被工作区设置/插件静默拦截了。
files.autoSave 必须设成字符串,不是 true 或 1
这个配置项是严格枚举值,只接受四个字符串:"off"、"afterDelay"、"onFocusChange"、"onWindowChange"。设成 true、1、"true" 或空值都会被忽略,VS Code 当作 "off" 处理。
-
"off":等同于默认行为,必须按Ctrl+S才落盘 -
"afterDelay":必须同步配files.autoSaveDelay(单位毫秒),否则延迟为 0,可能高频刷盘或卡顿 -
"onFocusChange":当前编辑器标签页失去焦点即保存,包括切到另一个文件、点终端、点资源管理器侧边栏 -
"onWindowChange":整个 VS Code 窗口失焦才触发,但系统通知、微信浮窗也会误触发,稳定性差
工作区设置(.vscode/settings.json)会直接覆盖全局配置
右下角状态栏显示「工作区」时,VS Code 正在读取项目根目录下的 .vscode/settings.json。哪怕你全局设了 "files.autoSave": "onFocusChange",只要这个文件里写了 "files.autoSave": "off",就彻底失效。
- 打开命令面板(
Ctrl+Shift+P),运行Preferences: Open Workspace Settings (JSON)直接检查 - 新建项目或克隆仓库后,第一件事就是确认该文件里没有硬编码的
"files.autoSave": "off" - 语言专属配置也走同样逻辑,比如
"[markdown]": { "files.autoSave": "off" }会让所有.md文件跳过自动保存
保存被插件静默取消,但状态栏仍显示“已保存”
启用 editor.formatOnSave 后,Prettier 或 ESLint 格式化失败时,VS Code 会中止整个保存流程——磁盘内容仍是旧的,但状态栏一闪而过“已保存”,极易误判。
- 打开开发者工具(
Ctrl+Shift+P→Developer: Toggle Developer Tools),看 Console 是否有Failed to save或codeActionsOnSave报错 - 临时禁用所有扩展,再测试是否恢复;确认问题后,单独调整对应插件的
editor.codeActionsOnSave配置 - 某些远程场景(WSL / SSH)下,格式化插件启动慢,也可能导致保存超时被丢弃
文件没路径、没修改状态,自动保存根本不触发
VS Code 的自动保存只对「已保存过的文件」或「有真实路径且处于修改状态(右上角带 ●)」的文件生效。新建的 Untitled-1、只读文件、Git 合并冲突中的临时标记行(如 <<<< HEAD),都不会触发任何自动保存逻辑。
- 编辑新文件后,先按
Ctrl+Shift+S指定路径,再开始写代码 - 检查左下角状态栏是否显示真实路径(如
./src/index.ts),而不是Untitled-1 - 如果文件刚从 Git 拉下来、未做任何改动,右上角无 ●,此时切换标签页也不会触发保存
最常被忽略的一点:自动保存不是“实时同步”,它只响应明确的用户交互事件(停顿、切标签、失焦),不会监听内存变化或后台改写。依赖它防丢代码,不如养成 Ctrl+S 条件反射 + 开启 files.hotExit 和本地历史备份。



















