同名文件标签互相覆盖是因预览模式(workbench.editor.enablePreview)启用所致;关闭该设置后,每次点击均新开常驻标签页,同名文件不再覆盖,且可通过editor.labelFormat设为medium或long显示路径以区分。

同名文件在标签页里互相覆盖,不是隐藏问题而是预览模式在作怪
VSCode 默认开启 workbench.editor.enablePreview,点击任意文件(比如连续点开多个 index.tsx)时,不会新建标签页,而是复用同一个预览标签——你看到的永远是最后一个,前面的“消失”了。这不是 files.exclude 能解决的,也不是文件被隐藏,只是标签没保留。
关闭预览模式后,每个文件独占一个标签页,同名问题自然缓解:
- 打开设置(
Ctrl+,),搜索enablePreview - 取消勾选
Workbench > Editor: Enable Preview - 顺手确认
Workbench > Editor: Show Tabs已启用
想让同名文件标签可区分?靠 editor.labelFormat 显示路径
即使关了预览,多个 config.ts 在同一级目录下仍难分辨。VSCode 标签页不支持 ${filePath} 这类变量,但 editor.labelFormat 能控制显示粒度:
-
"editor.labelFormat": "short"(默认)→ 只显示文件名,如config.ts -
"editor.labelFormat": "medium"→ 显示相对路径,如src/api/config.ts -
"editor.labelFormat": "long"→ 显示带工作区名的完整路径,多根工作区下更清晰
搭配 "editor.tabSizing": "fit" 防止路径被截断成 …config.ts。
files.exclude 不能按“同名”隐藏,但能按路径/扩展名批量过滤
VSCode 没有“隐藏所有名为 index.js 的文件”这种语义化规则。files.exclude 只认 glob 模式,匹配的是路径结构,不是文件语义。常见误操作:
- 写
"index.js": true→ 只匹配根目录下的index.js,无效 - 写
"**/index.js": true→ 才会隐藏所有层级的同名文件,但这是按路径匹配,不是“识别同名” - 想只隐藏测试用的
index.test.ts?得写"**/*.test.*": true或精确到"**/index.test.ts": true
注意:files.exclude 不影响已打开的编辑器标签,只控制资源管理器和 Ctrl+P 列表。
真正要“隐藏同名文件”的场景,往往该换思路
如果你反复想“把某个同名文件从侧边栏藏起来”,大概率是项目结构或命名习惯有问题:
- 多个
index.ts散落在不同模块?建议加前缀(apiIndex.ts、uiIndex.ts)或统一入口(index.ts导出,其余改名) - 编译产物和源码同名(如
index.js和index.ts)?直接用"**/*.js": true排除生成文件更稳妥 - 临时文件(
index.tmp、index~)?用"**/*~": true、"**/*.tmp": true精准过滤
glob 规则越宽泛,越容易误杀;越具体,维护成本越高。优先理清文件职责,再决定是否需要隐藏。











