必须同时关闭workbench.editor.enablepreview和workbench.editor.reuseeditors才能彻底禁用覆盖行为:前者解决单击预览(斜体标签),后者防止双击/确认打开时复用同uri标签页,缺一不可。

关掉 workbench.editor.enablePreview 就行,但别只关它——否则双击同名文件还是会被覆盖。
为什么单击文件总在预览标签里打开?
这是 workbench.editor.enablePreview 默认为 true 的直接结果:单击资源管理器里的文件,VSCode 不新建标签页,而是复用一个临时的“预览标签页”(斜体字、左下角标“预览”、无关闭 ×)。这个标签页不持久,后续任何单击都会把它内容替换成新文件,造成“覆盖错觉”。
- 预览标签页不会出现在
Ctrl+Tab切换列表中 - 双击该预览标签页,它会立刻转正为常驻标签(字体变正、出现 ×)
-
Ctrl+K Enter也能让当前预览标签马上转正 - 固定(Pin)对预览标签无效——它生命周期太短,图钉根本打不上
为什么关了预览,双击同名文件还被覆盖?
因为 workbench.editor.reuseEditors 还开着。这个设置和预览模式完全无关,它只管“用户确认式打开动作”:双击、Ctrl+P 回车、命令面板打开等。只要路径一致(比如两次双击 src/index.ts),它就强制复用当前激活标签页。
- 即使你已手动 Keep Open 了某个标签,双击同 URI 文件仍会覆盖它(除非它恰好是当前激活态)
- 多根工作区下,
src/a.ts和test/a.ts不会触发复用(URI 不同),但符号链接指向同一位置的文件一定会 - 仅设
"workbench.editor.enablePreview": false无法阻止这种覆盖
怎么确保每次打开都新建常驻标签页?
必须同时禁用两个开关,并检查干扰项:
- 在
settings.json中添加:"workbench.editor.enablePreview": false - 在同一位置添加:
"workbench.editor.reuseEditors": false - 确认
"workbench.editor.limit.enabled"是false(不是true且value: 1) - 建议设
"workbench.editor.openPositioning": "right",避免新标签强行插进当前激活位 - 改完后执行
Ctrl+Shift+P→Developer: Reload Window即可生效,无需重启
固定标签页(Pin)到底防什么?
图钉图标 ≠ 防关闭,只防两类行为:被新文件打开动作覆盖、被 Ctrl+Tab 轮询切换跳过。但它不防 Ctrl+W、点击 ×、鼠标中键关闭,也不防重启后丢失状态。
更关键的是:如果 workbench.editor.revealIfOpen 是 true(默认),哪怕打了图钉,通过“最近打开”或拖入外部文件仍可能被强制跳转过去——这个细节几乎没人注意,却常导致“明明固定了怎么还被顶掉”。











