vscode自动保存需配置files.autosave为off/afterdelay/onfocuschange/onwindowchange之一;选afterdelay必须配files.autosavedelay,且需排查工作区设置、语言专属配置及格式化插件干扰才能真正生效。

VSCode 默认不自动保存代码,必须显式配置 files.autoSave 才生效;选错模式或忽略配套设置(如 files.autoSaveDelay、语言专属覆盖、插件干扰)会导致“看起来开了却没保存”。
怎么配 files.autoSave 才真正起作用
它不是布尔开关,而是字符串枚举值,只能是这四个之一:off、afterDelay、onFocusChange、onWindowChange。图形界面里搜 “auto save” 点下拉选,本质就是往 settings.json 写这个字段。
-
off:默认值,完全关闭,每次改完都得按Ctrl+S/Cmd+S -
afterDelay:必须同时设files.autoSaveDelay(单位毫秒),否则延迟为 0,可能高频刷盘;常见值800~1500 -
onFocusChange:当前编辑器标签页失去焦点即保存(比如点终端、切到另一个 .ts 文件、甚至点侧边栏),响应快且不易丢内容 -
onWindowChange:整个 VS Code 窗口失焦才保存(比如Alt+Tab切到浏览器),但系统通知/微信浮窗也会触发,容易误存
为什么改了 files.autoSave 却没反应
90% 是被更高优先级的设置或插件覆盖了,而不是配置本身无效。
- 工作区设置(
.vscode/settings.json)会覆盖用户级设置,打开项目后检查该文件是否含"files.autoSave": "off" - 语言专属设置会单独生效:比如为
markdown设了"files.autoSave": "off",那所有.md文件都不走全局规则 -
editor.formatOnSave开启时,若 Prettier/ESLint 格式化失败(缺配置、语法错、插件未激活),VS Code 可能静默放弃本次保存 - 文件路径匹配了
files.watcherExclude或files.exclude(如"**/dist/**"),VS Code 可能跳过自动保存逻辑
onFocusChange 模式下,哪些操作会触发保存
它监听的是“当前编辑器焦点”,不是窗口或应用级焦点,所以行为比直觉更细粒度:
- 点击另一个打开的标签页(比如从
index.ts切到utils.ts)→index.ts立即保存 - 点终端面板、调试控制台、搜索面板 → 当前编辑的文件保存
- 点击侧边栏(资源管理器、搜索、源代码管理)→ 当前编辑的文件保存
- 但最小化 VS Code 窗口、弹出系统通知、微信浮窗盖住 —— 这些 不会 触发
onFocusChange,只影响onWindowChange
远程开发(WSL / SSH / Containers)下的坑
自动保存逻辑照常运行,但 IO 延迟和焦点定义会变:
-
afterDelay的实际延迟可能比设定值高 200–500ms,尤其项目路径在/mnt/c/(Windows 文件系统挂载点),建议移到 WSL 原生路径(如~/project) -
onFocusChange在远程窗口最小化时不一定触发,因为宿主系统对“焦点”的上报不一致;本地测试正常,远程就失效,先怀疑这点 - WSL 中若用
code .启动,确保是通过code-server或官方 WSL 支持方式,否则文件监听可能降级为轮询,写入变慢
最易被忽略的是:自动保存写了磁盘,不代表 Webpack/Vite/node 监听到变更——inotify 限制、挂载路径 symlink、未启用 usePolling 都会让热更新卡住,这时候不是 VS Code 没保存,而是下游工具“看不见”。











