单击文件总被替换是因为vscode默认开启预览模式(workbench.editor.enablepreview为true),单击仅临时打开斜体标签,再点其他文件即被覆盖;关掉该设置并同步禁用reuseeditors才能彻底避免覆盖。

为什么单击文件总被替换?是预览模式在起作用
VSCode 默认开启 workbench.editor.enablePreview,导致在资源管理器里单击任意文件时,它只是临时“预览”——标签斜体、不占常驻位、再点下一个就立刻被顶掉。这不是 bug,是设计行为,目的是减少标签页堆积。
关键点在于:这个行为只影响「单击」动作;双击、Ctrl+P 搜索回车、命令面板打开等操作,默认走的是另一套逻辑(可能复用也可能不复用),和预览模式无关。
- 已存在的斜体标签不会因改配置自动变正体,必须手动右键 → Keep Open 或按
Ctrl+K Enter - 关掉预览后,新单击的文件才直接开成常驻标签;旧的预览标签仍保持斜体,直到你主动保存、切换焦点或手动固定
- 部分跳转来源(如 Ctrl+Click 定义、搜索结果双击)有独立预览开关,需额外配
workbench.editor.enablePreviewFromQuickOpen等
怎么让每次打开都新建标签页,彻底不覆盖
只关预览还不够。很多人发现即使 workbench.editor.enablePreview 设为 false,双击同名文件还是覆盖当前标签——问题出在 workbench.editor.reuseEditors。
这个设置控制的是「用户主动打开一个已存在标签的文件时,是否强制复用当前激活标签」。默认 true,所以哪怕你开了 10 个标签,只要双击其中一个已打开的文件,它就会跳回去并挤掉当前内容。
- 必须同时设:
"workbench.editor.enablePreview": false和"workbench.editor.reuseEditors": false - 否则任一为
true,都可能触发覆盖:前者影响单击,后者影响双击/命令打开 - 如果还启用了编辑器组数量限制(
"workbench.editor.limit.enabled": true),也得关掉,否则新标签会被强行挤掉
固定标签页(Keep Open)到底防什么、不防什么
Keep Open 不是“锁定”,而是“脱离预览生命周期”。它让一个标签从临时态转为常驻态,但不改变关闭权限。
固定后能防的行为:
- 被后续单击/双击其他文件覆盖(前提是
enablePreview和reuseEditors已关) - 被右键 → Close All Other Editors 清掉
- 被空闲自动回收(比如长时间没操作)
固定后**仍然会响应**的关闭操作:
-
Ctrl+W(焦点在该标签时,必定关闭) - 鼠标中键点击标签页(VSCode 默认绑定为强制关闭,与是否固定无关)
- 双击标签页空白处(UI 层直接触发关闭,绕过固定状态)
- 整个编辑器组被关闭(比如右键组标题 → Close Group)
容易被忽略的细节和真实限制
VSCode 的标签管理是内存态、非持久的。所有 Keep Open 状态在重启后全部丢失,没有配置项能保存它——这不是缺陷,是编辑器模型决定的。
多根工作区下,reuseEditors 的复用判断基于 URI,不是文件名。所以 src/index.ts 和 test/index.ts 不会互相覆盖;但同一路径下反复双击,一定复用(除非设为 false)。
真正需要长期盯住的文件,与其依赖固定,不如:
- 用
Split Editor(Ctrl+\)把它钉在一侧,视觉+逻辑双重隔离 - 对极关键文件,开独立 VSCode 窗口(File → New Window),完全不共享编辑器组
- 终端标签页不响应
Keep Open,得单独配terminal.integrated.persistentSession











