不是 vscode 坏了,而是 files.autosave 没配对值、被覆盖或未满足触发条件——90% 的“不生效”卡在这三处;必须设为 "off"/"afterdelay"/"onfocuschange"/"onwindowchange" 四个字符串之一,设 true/1 等非法值会被忽略,工作区设置、语言专属配置或格式化插件失败均可能导致失效。

直接说结论:不是 VSCode 坏了,而是 files.autoSave 没配对值、被覆盖、或根本没触发条件——90% 的“不生效”卡在这三处。
为什么设了 files.autoSave 还是不保存
VSCode 只认四个字符串值:"off"、"afterDelay"、"onFocusChange"、"onWindowChange"。设成 true、1、"true" 或空值,它会静默忽略,等同于 "off"。
- 检查你改的是哪一级设置:右下角状态栏显示「工作区」时,
.vscode/settings.json里的配置优先级最高,会直接盖掉用户设置 - 打开命令面板(
Ctrl+Shift+P),运行Preferences: Open Workspace Settings (JSON),确认里面没有"files.autoSave": "off" - 语言专属配置也有效:比如
"[python]": { "files.autoSave": "off" },会让所有.py文件跳过自动保存
afterDelay 模式必须配 files.autoSaveDelay
选 "afterDelay" 却没反应?大概率是漏配延迟时间。这个值单位是毫秒,且必须是正整数;不设或设为 0、负数,VSCode 会退化为不触发保存。
- 推荐设
1000(1 秒):太小(如300)容易和格式化插件抢资源,尤其在 WSL 或远程开发中卡顿明显 - 太大(如
5000)容易切走就忘了存,改完代码点终端查日志,可能还是旧内容 - 这个延迟只对“停止输入”起作用——连续敲字不会保存,停顿超时才落盘
保存被插件静默取消,但状态栏显示“已保存”
启用 editor.formatOnSave 或 editor.codeActionsOnSave 后,如果 Prettier、ESLint、Ruff 等插件格式化失败或超时,VSCode 会中止整个保存流程——磁盘文件仍是旧的,但状态栏一闪而过“已保存”,极易误判。
- 打开开发者工具(
Ctrl+Shift+P→Developer: Toggle Developer Tools),切到 Console,复现一次保存,看是否有Failed to save或codeActionsOnSave相关报错 - 临时禁用所有扩展再试;确认问题后,单独调整对应插件的
editor.codeActionsOnSave配置,比如把"source.fixAll.eslint": true改为false - 某些 Python 项目模板(如 cookiecutter-django)自带的
.vscode/settings.json默认关掉自动保存,只为防误提交调试代码
文件根本没进入自动保存的触发范围
VSCode 的自动保存只对「有真实路径 + 处于修改状态(右上角带 ●)」的文件生效。以下情况它完全不响应:
- 新建的
Untitled-1标签页:必须先File > Save As指定路径(如./src/main.py),保存后左下角出现路径才开始监听 - 只读文件、Git 合并冲突中的临时标记行(如
)、路径匹配 <code>files.exclude(如"**/dist/**")的文件,都不会触发 - 运行代码(如
F5、Code Runner插件)前,VSCode 绝不会自动保存——它只读磁盘文件,改完不存,跑的就是旧版本
真正容易被忽略的是:自动保存不是“实时同步”,它依赖编辑器状态、路径存在性、以及插件链是否完整打通。别只靠它防丢代码,Ctrl+S 习惯 + Git 快照 + files.hotExit 才是实际兜底组合。











