vscode运行代码前不自动保存,因“运行”动作与files.autosave解耦;推荐设onfocuschange模式,切出编辑器即保存,确保运行时为最新代码;code-runner插件可配savefilebeforerun实现真正运行前保存。

VSCode 运行代码前不会自动保存文件,除非你明确配置了 files.autoSave 并选对触发时机——它和“运行”动作本身无关,只响应编辑状态或焦点变化。
为什么点 Run / Debug 没触发保存?
VSCode 的运行(如 Run Code 扩展、终端执行 python main.py、或启动调试器)默认不调用保存逻辑。它读取的是磁盘上**当前已写入的文件内容**。如果你改了代码但没保存,运行的就是旧版本。
- 常见现象:改完函数逻辑,直接按
Ctrl+F5调试,断点不命中、输出没变——八成是文件还挂着 ●(未保存标记) - 不是 Bug,是设计:VSCode 把“编辑”“保存”“执行”三件事解耦,避免意外覆盖未审核的修改
- 某些插件(如
code-runner)提供code-runner.runInTerminal或code-runner.saveFileBeforeRun配置项,但这是插件层行为,不是 VSCode 内置机制
files.autoSave 选哪个值才能覆盖“运行前”场景?
没有叫“onRun”的模式,但 onFocusChange 是最接近你要的效果:只要你在运行前切出编辑器(比如点进终端、调试控制台、甚至点击侧边栏),当前文件就立刻保存,确保运行时读到最新内容。
-
afterDelay不可靠:延迟期间你可能已经点了运行,结果还是旧代码 -
onWindowChange太宽泛:微信弹窗盖住 VSCode 就触发,容易误存未完成的草稿 -
onFocusChange刚好卡在“准备运行”的动作节点上——你点终端准备敲命令、点调试面板准备启服务,都算失焦 - 注意:如果用分屏终端(如 VSCode 内置 Terminal + 编辑器并排),鼠标从编辑器挪到终端即触发,非常契合
code-runner 插件怎么配运行前强制保存?
如果你用的是 formulahendry.code-runner 这类插件,它支持独立开关,优先级高于 files.autoSave,能真正绑定到“运行”动作上。
- 打开设置,搜索
code-runner.saveFileBeforeRun,勾选启用 - 或者手动在
settings.json中加一行:"code-runner.saveFileBeforeRun": true - 这个选项会绕过
files.autoSave设置,在每次点击“运行代码”按钮或执行快捷键前,强制调用一次保存 - 缺点:仅对
code-runner支持的语言生效(Python/JS/Go 等),对调试器(launch.json)或自定义终端脚本无效
调试器(Debug)启动前怎么确保保存?
VSCode 调试器本身不提供“保存前钩子”,但你可以用 preLaunchTask 绕过:让调试启动前先跑一个保存任务。
- 在项目根目录创建
.vscode/tasks.json,内容如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "save active file",
"type": "shell",
"command": "echo 'saved'",
"group": "build",
"presentation": { "echo": false, "reveal": false, "focus": false },
"problemMatcher": []
}
]
}
.vscode/launch.json 的配置里加:"preLaunchTask": "save active file"
onFocusChange 设为全局策略,覆盖绝大多数“切出去再运行”的路径最易被忽略的一点:工作区设置会静默覆盖用户设置。哪怕你在全局设了 onFocusChange,只要项目里有 .vscode/settings.json 且含 "files.autoSave": "off",那个文件夹下所有编辑器就都不自动保存——运行前丢代码的问题,往往卡在这儿。











