vscode自动保存需正确配置files.autosave枚举值(off/afterdelay/onfocuschange/onwindowchange),设为布尔或数字无效;常见失效源于工作区设置覆盖、语言专属配置、插件格式化失败或未排除构建目录。

VSCode 默认不自动保存,改完代码必须按 Ctrl+S(Windows/Linux)或 Cmd+S(macOS)才写入磁盘;所谓“自动保存”是可选功能,且必须选对模式、配好参数,否则看起来像失效。
files.autoSave 是字符串枚举,不是开关
它只有四个合法值:off、afterDelay、onFocusChange、onWindowChange。设成 true 或 1 这类布尔/数字会直接被忽略,配置不生效。
-
off:完全禁用,等同于默认行为 -
afterDelay:必须同步配置files.autoSaveDelay(单位毫秒),否则默认延迟可能不触发保存 -
onFocusChange:当前编辑器标签页失去焦点就保存,包括点终端、切侧边栏、甚至点击文件资源管理器 -
onWindowChange:整个 VSCode 窗口失焦才保存,比如Alt+Tab切到浏览器——但系统通知弹窗、微信浮窗也会触发,不稳定
为什么改了 settings.json 却没反应
常见失效不是配置错,而是被更高优先级规则覆盖:
- 工作区设置(
.vscode/settings.json)会覆盖用户级设置;右下角显示「工作区」时,要检查该文件里是否写了"files.autoSave": "off" - 语言专属设置会单独生效:比如你为
markdown配了"files.autoSave": "off",那所有.md文件都不会自动保存 - 某些插件(如 Prettier、ESLint)启用
editor.formatOnSave后,若格式化失败(缺配置、依赖未安装),VSCode 会静默取消本次保存,看起来像“没存”
files.autoSaveExclude 能避免误触发构建
自动保存不会识别哪些文件不该写盘,得靠手动排除:
- 前端项目中,
"**/dist/**"、"**/build/**"这类产出目录频繁保存会反复触发 Webpack/Vite 监听编译 - Python 项目里,
"**/__pycache__/**"、"**/*.pyc"也建议排除,避免 Git 脏提交 - 路径用
/(不是\),支持 glob 模式;多根工作区建议写在工作区.vscode/settings.json里,不污染全局
afterDelay 和 onFocusChange 的实际手感差异
选错模式会明显影响编码节奏:
- 用
onFocusChange写代码时切终端查日志,立刻保存——适合怕丢内容的新手或编辑配置文件 - 用
afterDelay(推荐800~1500毫秒)更适合连续编码:敲几十个字符不会每下都刷盘,但停顿 1 秒后自动落盘 - 设
files.autoSaveDelay为100毫秒,在 WSL 或机械硬盘上能感知卡顿;设成3000又容易忘记改了什么就切走了
真正容易被忽略的是:自动保存只对“已修改”的文件生效——新建空文件、刚拉取未改动的文件右上角没圆点(●),它根本不会写盘,这不是 bug,是设计逻辑。











