直接设 "files.confirmchangeondisk": false 即可关闭弹窗,vscode 会静默合并外部更改而不中断编辑;若仍弹出,需检查扩展或工作区设置覆盖。

VSCode 总是弹“文件已在外部更改,是否重新加载?”怎么关
这个提示默认开启,目的是防止你编辑时被其他程序(比如 Git、编译器、脚本)悄悄改了文件内容导致冲突。但如果你明确知道外部修改是可控的(比如用命令行 git checkout 切分支、用 sed 批量替换),它反而干扰操作。
关闭方式:改 files.autoSave 和 files.hotExit 不管用,得调 files.useExperimentalFileWatcher
很多人试过关掉自动保存或热退出,其实没用——触发这个弹窗的是 VSCode 的文件监听机制,不是保存策略。关键在底层 watcher 行为:
-
files.useExperimentalFileWatcher设为false会回退到旧版监听逻辑,对某些文件系统(尤其是 WSL2、网络盘、Docker volume)更稳定,且默认不弹重载提示 - 但副作用是:大目录下文件增删可能延迟感知,
Ctrl+P搜索新文件稍慢一点 - Windows/macOS 本地磁盘影响极小;Linux/WSL2 用户开这个反而常出问题,建议关
更干净的解法:设 files.confirmChangeOnDisk 为 false
这才是直击弹窗源头的配置。它控制“检测到磁盘变更后是否弹确认框”,设为 false 后,VSCode 会静默合并变更(保留你当前编辑内容,同时拉入外部改动),不打断流程:
- 修改位置:
settings.json中加一行:"files.confirmChangeOnDisk": false - 注意:这不会丢你未保存的修改,VSCode 仍会做内容 diff 和合并(类似 git merge 的三路合并逻辑)
- 如果外部修改和你正在编辑的区域冲突,光标会停在冲突标记处(显示
那种),需要手动处理 - 不推荐在团队共享项目中全局关闭,尤其多人共用同一份配置时
为什么改了设置还弹?检查有没有扩展在抢监听
有些扩展(比如 GitLens、Auto Rename Tag、某些 ESLint 插件)会自己注册文件系统监听器,绕过 VSCode 主设置:
- 临时禁用所有扩展,重启 VSCode 测试是否还弹——如果好了,逐个开回来定位
- 常见肇事者:
PHP Intelephense在启用files.watcherExclude不当时会重复触发 - 检查工作区
.vscode/settings.json是否有覆盖用户级设置(优先级更高) - 终端里运行
code --status可看到当前活跃的文件监听器来源
真正麻烦的不是关不掉,而是关掉之后没意识到 VSCode 其实还在后台默默合并内容——一旦外部改的是你正删的一整段代码,而你又没注意底部状态栏那个“已合并更改”的小提示,就容易以为改丢了。











