如何在VSCode中获取打开编辑器列表或无弹窗切换至前一个使用的编辑器?
实现VSCode无弹窗切换最近使用编辑器及获取编辑器列表
一、无弹窗切换至最近使用的前一个编辑器
VSCode官方未直接暴露Ctrl+Tab依赖的MRU(最近使用)列表接口,但可以通过监听编辑器激活事件自行维护MRU栈,实现类似Emacs的缓冲区切换逻辑:
- 维护MRU编辑器栈
初始化数组存储最近使用的编辑器,每次激活新编辑器时,将其从数组中移除(避免重复)并插入到栈顶。 - 注册切换命令
触发命令时,直接切换到栈中第二个元素(栈顶为当前激活编辑器)。
核心实现代码(TypeScript):
import * as vscode from 'vscode'; let mruEditors: vscode.TextEditor[] = []; export function activate(context: vscode.ExtensionContext) { // 监听编辑器激活事件,更新MRU列表 const editorChangeDisposable = vscode.window.onDidChangeActiveTextEditor(editor => { if (!editor) return; // 移除已存在的编辑器实例,防止重复 const existingIndex = mruEditors.findIndex(e => e.document.uri.toString() === editor.document.uri.toString()); if (existingIndex !== -1) { mruEditors.splice(existingIndex, 1); } // 将当前编辑器放到栈顶 mruEditors.unshift(editor); }); // 注册自定义切换命令 const switchCommand = vscode.commands.registerCommand('extension.switchToLastUsedEditor', () => { if (mruEditors.length < 2) { vscode.window.showInformationMessage('无可用的历史编辑器'); return; } // 切换到上一个使用的编辑器 vscode.window.showTextEditor(mruEditors[1]); }); context.subscriptions.push(editorChangeDisposable, switchCommand); }
完成后,在package.json中配置命令的快捷键,即可通过快捷键直接触发无弹窗切换。
二、获取VSCode已打开的编辑器列表
VSCode提供了两个API用于获取编辑器/文档列表:
- 获取可见编辑器:
vscode.window.visibleTextEditors,返回当前窗口中可见的编辑器(如分栏、标签页中显示的)。 - 获取所有已打开文档:
vscode.workspace.textDocuments,返回所有已打开的文档(每个文档对应至少一个编辑器,若同一文档多开会重复出现)。
示例代码:
// 获取当前可见的编辑器 const visibleEditors = vscode.window.visibleTextEditors; console.log('可见编辑器数量:', visibleEditors.length); // 获取所有已打开的文档(对应编辑器) const allOpenedDocs = vscode.workspace.textDocuments; console.log('已打开文档总数:', allOpenedDocs.length); // 去重统计唯一打开的文档 const uniqueDocUris = new Set(allOpenedDocs.map(doc => doc.uri.toString())); console.log('唯一打开文档数量:', uniqueDocUris.size);
内容的提问来源于stack exchange,提问作者ksh
相关产品推荐
相关产品推荐

