VSCode默认不自动保存文件,运行的是磁盘旧版本;启用code-runner.saveFileBeforeRun: true可确保每次点击▶️或按Ctrl+Alt+N前强制保存当前文件,仅对Code Runner生效,不依赖files.autoSave。

VSCode 默认不会在运行脚本前自动保存文件,必须显式配置才能生效——否则你点运行的永远是上一次保存的旧版本。
code-runner.saveFileBeforeRun 是唯一真正绑定“运行”动作的开关
如果你用的是 formulahendry.code-runner 插件(Python/JS/Go 等单文件快速执行最常用),它提供了唯一一个直连“运行”行为的保存控制项:code-runner.saveFileBeforeRun。
- 启用后,每次触发
code-runner.run(快捷键Ctrl+Alt+N或点击右上角 ▶️)前,VS Code 会强制调用一次保存,不依赖files.autoSave设置 - 只作用于当前文件,对多文件依赖(如
import的模块未保存)无效 - 不适用于
launch.json调试、自定义tasks.json或终端直接执行命令(如python main.py) - 配置方式:设置中搜
code-runner.saveFileBeforeRun勾选,或手动加到settings.json:"code-runner.saveFileBeforeRun": true
files.autoSave 的 onFocusChange 模式最贴近“准备运行”的时机
files.autoSave 本身没有 onRun 选项,但 onFocusChange 是最实用的替代方案:当你从编辑器切到终端、调试面板、侧边栏甚至 Git 面板时,立刻保存。
- 比
afterDelay更可靠——避免“改两行就点运行,结果延迟还没到,跑的还是旧逻辑” - 比
onWindowChange更精准——微信浮窗、系统通知不会误触发 - 注意:未命名的
Untitled-1文件永远不会写入磁盘,必须先Ctrl+S指定路径 - 检查是否被覆盖:打开项目根目录下的
.vscode/settings.json,搜索"files.autoSave",如果值是"off",删掉这行
为什么改了设置却还是运行旧代码?优先排查这三处
90% 的“没生效”不是配置错,而是被更高优先级规则静默覆盖。
-
.vscode/settings.json存在且含"files.autoSave": "off"—— 工作区设置优先级高于用户设置,UI 不提示 - 语言专属配置干扰:比如
"[python]": { "files.autoSave": "off" }会让所有.py文件失效 - 格式化插件中断保存:启用了
editor.formatOnSave(如 Prettier),但当前文件有语法错误或插件未激活,VS Code 会静默放弃本次保存——看右下角状态栏是否闪红
远程开发(WSL / SSH)下容易忽略的 IO 延迟
在 WSL 或远程 SSH 环境中,afterDelay 模式实际落盘时间可能比设定值高 200–500ms,尤其路径挂载在 /mnt/c/(Windows 文件系统)时。
- 若你设了
files.autoSaveDelay: 100,在 WSL 下可能高频刷盘甚至卡顿 -
onFocusChange相对更稳,但切到远程终端时仍可能因网络延迟出现微小滞后 - 关键点:Code Runner 执行的是磁盘上的文件,不是编辑器内存缓冲区——只要没落盘,就一定不是最新内容


















