VS Code 运行代码前不会自动保存文件,必须手动配置 files.autoSave(如 afterDelay 或 onFocusChange)并确保无工作区覆盖、格式化插件干扰等,否则运行的是未保存的旧版本。

VS Code 不会在你点击“运行”时自动保存当前文件——它压根没有这个逻辑。所谓“运行前自动保存”,必须靠你自己配 files.autoSave + 显式触发执行链,否则改完代码点运行,跑的还是磁盘里旧版本。
为什么点了运行却没生效?根本没保存
这是最常被误判的问题:你以为“运行”会顺手保存,其实 VS Code 的 Run Code(比如 Code Runner 插件)、终端命令(python main.py)、甚至调试器(F5)都只读磁盘文件。如果你改了但没保存,它们就永远读不到新内容。
- 状态栏右下角没显示“已保存”字样 → 文件仍是 dirty 状态,肯定没落盘
- 改完代码直接 Ctrl+F5 或点击 ▶️ 运行 → 如果
files.autoSave是off,那运行的就是上一次保存的版本 - 用 Code Runner 插件时,它默认不强制保存;即使开了
code-runner.saveFileBeforeRun,也只对当前文件有效,不解决多文件依赖场景
files.autoSave 选哪个值才真有用
别信“开个开关就行”。files.autoSave 是字符串枚举,只有四个合法值:off、afterDelay、onFocusChange、onWindowChange。选错等于白配。
-
afterDelay:必须同步设files.autoSaveDelay(单位毫秒),建议 800~1200。设成 100 会高频刷盘,尤其 WSL 或远程开发时明显卡顿;设成 5000 又容易漏存 -
onFocusChange:切出当前编辑器标签就保存——点终端、切到另一个 .py 文件、甚至点资源管理器都会触发。适合怕丢内容的人,但不适合边写边频繁查日志的场景 -
onWindowChange:整个 VS Code 窗口失焦才保存,比如 Alt+Tab 切到浏览器。但系统通知、微信浮窗、Spotlight 搜索也会让它失焦,容易误存 -
off:不是不能用,而是得清楚自己在做什么。比如调试时临时改.env,你可能真不想它自动落盘
工作区设置和语言专属配置会悄悄关掉自动保存
你全局设好了 files.autoSave,进项目却发现没反应?大概率是下面两个地方偷偷覆盖了:
- 项目根目录下的
.vscode/settings.json里写了"files.autoSave": "off"—— 它优先级高于用户设置,且 UI 设置界面不会标红提醒 - 为某语言单独关掉了:比如通过
Preferences: Configure Language Specific Settings给plaintext设了"files.autoSave": "off",那所有未命名的Untitled-1都不会自动保存 - 文件路径匹配了
files.exclude或files.watcherExclude(如"**/dist/**"),VS Code 可能跳过监听,自然也不保存
格式化插件可能让保存“静默失败”
开了 editor.formatOnSave 后,VS Code 会先保存原始内容,再调格式化。但如果格式化失败(比如 Prettier 找不到配置、ESLint 规则报错、插件没激活),它有时会回退并放弃本次保存——文件仍处于 dirty 状态,但没有任何提示。
- 临时验证方法:关掉
editor.formatOnSave,再试一次保存,看是否立刻生效 - Python 用户注意:如果用了
pylsp,editor.codeActionsOnSave里配了"source.fixAll": true,但pylint没装或配置错,也会拦住保存流程 - 远程开发(WSL/SSH)下,格式化插件启动慢,
afterDelay实际延迟可能比设定值高 300ms 以上,容易误判为“没保存”
真正难搞的不是配什么值,而是你改了之后不知道它到底有没有生效——状态栏不报错、控制台没日志、文件看起来也没变。最稳的方式是:改完设置,手动改一行代码,然后切到终端,看状态栏是否闪一下“已保存”。别的都是障眼法。


















