vscode默认完全不自动保存,必须显式配置files.autosave为onfocuschange等合法值;onfocuschange最可靠,失焦即保存,无需delay配置,且能覆盖多数运行前保存场景,但受工作区设置、语言专属配置及格式化插件失败干扰。

VSCode 默认完全不自动保存,改完代码点运行、调试或 Git 提交,用的全是上一次手动保存的旧内容——这不是 bug,是设计如此。必须主动配 files.autoSave,且选对值,否则永远在“以为保存了”和“实际没保存”之间反复横跳。
选 onFocusChange 最省心,别碰 afterDelay 默认值
新手最容易踩的坑:搜到“设置 auto save → 选 afterDelay → 没改 delay 值 → 觉得没反应”。afterDelay 默认延迟 1000ms,但你切出编辑器、点终端、Alt+Tab 的瞬间,根本等不到它触发,修改就丢了。
-
onFocusChange是当前编辑器失去焦点时立刻保存:点一下资源管理器、切个 tab、点下终端,文件当场落盘,行为最符合直觉 - 它不依赖
files.autoSaveDelay,设了也无效,不用管 - 避免
onWindowChange:微信弹窗、系统通知、甚至 Spotlight 搜索都会让 VS Code 窗口失焦,导致非预期保存 - 别用
off+ 手动 Ctrl+S:违背“自动”初衷,尤其调试时临时改配置,一走神就跑旧版本
检查工作区设置是否偷偷关掉了自动保存
你全局设好了 files.autoSave,进项目却失效?大概率是项目根目录下的 .vscode/settings.json 里写了 "files.autoSave": "off" —— 它优先级高于用户设置,而且设置界面 UI 不会标红提醒。
- 右下角状态栏看有没有「工作区」字样,有就说明当前生效的是工作区配置
- 按
Ctrl+Shift+P输入Preferences: Open Workspace Settings (JSON),直接查files.autoSave值 - 语言专属设置也可能覆盖:比如给
plaintext设了"files.autoSave": "off",那所有未命名的Untitled-1都不会自动保存
新建文件(Untitled)必须先手动保存一次
VSCode 对无路径的临时文件(如 Untitled-1)不启用任何自动保存逻辑——哪怕你设了 onFocusChange,它也完全无视。这是硬限制,不是 bug。
- 新建文件后,务必先按
Ctrl+S(或Cmd+S),指定路径并保存为真实文件(如main.py) - 保存后,
files.autoSave策略才开始生效 - 没保存的新建文件,关掉窗口或崩溃,内容彻底丢失,
files.hotExit也救不回来
格式化插件可能让自动保存“看起来失败”
开了 editor.formatOnSave 后,VSCode 会在保存前调用格式化插件。如果插件没装、配置错、或格式化失败(比如 Prettier 缺少 .prettierrc),VS Code 会取消本次保存——文件右上角持续显示星号,但磁盘内容没变。
- 确认已安装对应语言的 formatter 插件:Python 用
ms-python.black-formatter,JS/TS 用esbenp.prettier-vscode - 检查
editor.defaultFormatter是否按语言指定了,例如:"[python]": "ms-python.black-formatter" - 打开开发者工具(
Ctrl+Shift+P→Developer: Toggle Developer Tools),看 Console 是否报No formatter registered或Failed to format document
真正容易被忽略的是:自动保存只管写磁盘,不管 Git。哪怕你每秒都保存,没 git commit 就等于没备份;而新建文件不手动存第一次,后面所有配置都白搭。











