vscode运行代码不会自动保存,files.autosave与运行操作无关;code-runner.savefilebeforerun是唯一绑定“运行”动作的保存开关,仅对code-runner插件生效。

VSCode 运行代码本身不会触发保存,无论你按 Ctrl+F5、右键 Run Code,还是点调试按钮 —— 它读的永远是磁盘上已写入的内容。所谓“运行前自动保存”,必须靠额外配置补上这一环。
files.autoSave 根本不响应“运行”动作
这是最常被误解的一点:files.autoSave 的三个模式(afterDelay、onFocusChange、onWindowChange)都和“点击运行”完全无关。它只监听编辑状态或窗口焦点变化,不监听 code-runner.run 或 workbench.action.terminal.runActiveFile 这类命令。
- 你改完函数,直接 Ctrl+F5 → 如果文件还挂着 ●,运行的就是旧版本
-
onFocusChange看似“切到终端就保存”,但如果你用的是内联终端(Terminal 与编辑器同屏),鼠标挪过去瞬间才保存,而你可能已经点了运行键 -
afterDelay更不可靠:设了 1000ms,但你在改完第 800ms 就点了运行,照样读旧文件
code-runner.saveFileBeforeRun 是唯一真正绑定“运行”的开关
如果你用的是 formulahendry.code-runner 插件(最常见 Python/JS/Go 快速运行场景),它提供了原生支持的强制保存钩子:code-runner.saveFileBeforeRun。
- 启用后,每次执行
code-runner.run(快捷键Ctrl+Alt+N或右键菜单)前,VS Code 会强制调用一次保存,不依赖焦点、延迟或任何外部状态 - 配置方式:在
.vscode/settings.json中加一行:"code-runner.saveFileBeforeRun": true - 注意:它只对 code-runner 支持的语言生效;对
launch.json启动的调试器、自定义 shell 脚本、或tasks.json任务无效
Run On Save 插件实现“保存后自动运行”,更通用但时机不同
如果你需要的是“改完就跑”,而不是“点运行前先存”,emeraldwalk.runonsave 是更灵活的选择。它监听 onDidSaveTextDocument 事件,在文件落盘后立即执行命令。
- 配置示例(匹配 Python 文件):
{ "emeraldwalk.runonsave": { "commands": [ { "match": ".*\.py$", "cmd": "python '${file}'" } ] } } - 关键细节:
"match"必须用正则,"*.py"会失效;${file}是绝对路径,避免cd错误 - 缺点:它不解决“运行前没保存”的问题,而是把流程倒过来——你仍需确保文件已保存(手动或靠
files.autoSave),它才触发运行
真正卡住人的地方,往往不是“怎么配”,而是没意识到 VS Code 把“编辑→保存→执行”三件事彻底解耦。哪怕你开了 onFocusChange,只要鼠标没离开编辑器标签页,运行动作就永远读不到最新内容。code-runner 的 saveFileBeforeRun 是目前唯一能精准咬合“运行”这个动作的配置,但它的作用域很窄——只管插件自己的运行逻辑,不管调试、终端直输、也不管其他构建工具链。











