Ctrl+Tab切不到已修改文件,因其按最近使用顺序(MRU)切换,完全不感知文件是否被修改;预览标签页(斜体)默认不入MRU列表,且从搜索或大纲打开的文件多为预览态,故无法通过Ctrl+Tab直达。

Ctrl+Tab 为什么切不到已修改的文件?
因为默认的 Ctrl+Tab 是按「最近使用顺序」(MRU)切换,完全不感知文件是否被修改。哪怕你刚在 index.ts 里敲了十行代码、保存都没点,它在 MRU 列表里的位置只取决于你上一次激活它的时刻——和脏状态无关。
更麻烦的是:预览标签页(斜体显示)默认不进 MRU 列表,而你从搜索结果或大纲单击打开的文件,大概率就是预览态。它改得再猛,Ctrl+Tab 也“看不见”。
想直达已修改文件,得用 Ctrl+P + git: 前缀
Ctrl+P 默认只搜已打开文件和工作区根下文件,但加前缀就能定向过滤:
-
git:—— 列出所有 Git 状态为 modified / staged / untracked 的文件(需项目已初始化 Git) -
git:modified—— 精确匹配仅 modified 状态的文件(VSCode 1.80+ 支持) -
git:staged—— 直达已暂存的文件
输入后回车,直接跳转并聚焦编辑器。注意:如果文件还没被 Git 跟踪(比如新创建未 git add),它不会出现在 git: 结果里,此时只能靠 Ctrl+P 模糊搜文件名。
workbench.action.showAllEditors 不解决脏标问题
有人试过命令面板运行 workbench.action.showAllEditors(快捷键 Ctrl+Shift+E),但它只是弹出当前组所有已打开编辑器的列表,**不标记哪些是已修改的**,也没有排序逻辑。列表里全是平铺名字,你得肉眼扫「●」符号找脏文件——效率反而更低。
真正有用的替代方案是插件:Dirty Tabs 或 Tab Outliner,它们能在标签栏直接高亮显示修改状态,甚至支持点击跳转到下一个 dirty tab。但纯原生环境里,git: 前缀仍是最快路径。
为什么不能用 Ctrl+1~Ctrl+9 快速定位?
Ctrl+1~Ctrl+9 跳的是「标签栏物理位置」,不是「修改状态」。即使第 3 个标签页是唯一一个带 ● 的文件,你也得先知道它在第几个位置——而拖拽重排、预览态占位、关闭再开都会让这个位置随时变化。
更关键的是:如果那个已修改的文件是以预览模式打开的(比如从搜索结果单击),它根本不会获得固定位置索引,Ctrl+3 会直接跳过它,落到下一个常驻标签页上。
所以别指望数字键“记住”脏文件位置。它只认坐标,不认状态。
最易被忽略的一点:Git 修改状态 ≠ 编辑器脏状态。如果你关掉了自动保存(files.autoSave 设为 off),文件改了但没手动保存,git: 前缀仍能捕获;但编辑器右上角的 ● 可能还没出现——这时候你得信 git:,而不是眼睛。


















