如何在 VS Code 中关闭 TextDocument?

bla*_*ool 10 visual-studio-code vscode-extensions

我正在编写 vscode 扩展。

我用 打开了一个 TextDocument vscode.window.showTextDocument,想稍后关闭它。但是我找不到api来关闭它。最后我找到了这个提交,它被删除了closeTextDocument。我现在该怎么办?

小智 10

我遇到了同样的问题。我设法做到的唯一方法是通过workbench.action.closeActiveEditor,正如TextEditor.hide.

这是hackish - 基本上在编辑器中显示文档,然后关闭活动编辑器:

vscode.window.showTextDocument(entry.uri, {preview: true, preserveFocus: false})
    .then(() => {
        return vscode.commands.executeCommand('workbench.action.closeActiveEditor');
    });
Run Code Online (Sandbox Code Playgroud)

  • @Sebastian 因为 `textEditor.hide` 已被弃用。根据 VSCode 文档: > 请改用命令“workbench.action.closeActiveEditor”。此方法会显示意外行为,并将在下一个主要更新中删除。 (2认同)

wid*_*lov 6

从 VSCode v1.67 开始,您可以使用它TabGroups来查找并关闭您喜欢的文档。

例如这样(在TypeScript中):

import * as vscode from "vscode";

export async function closeFileIfOpen(file:vscode.Uri) : Promise<void> {
    const tabs: vscode.Tab[] = vscode.window.tabGroups.all.map(tg => tg.tabs).flat();
    const index = tabs.findIndex(tab => tab.input instanceof vscode.TabInputText && tab.input.uri.path === file.path);
    if (index !== -1) {
        await vscode.window.tabGroups.close(tabs[index]);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

const myFile = vscode.Uri.file('c:\some\random\file.txt');
await closeFileIfOpen(myFile);
Run Code Online (Sandbox Code Playgroud)

参考:最初受到ct_jdr 这个答案的启发。