vscode扩展,设置window.activeTextEditor

Ant*_* S. 2 visual-studio-code vscode-extensions

如何使用 vscode 扩展 api 来设置activeTextEditor

我需要这个的原因是因为我的扩展依赖于对扩展 B 的外部调用,而扩展 B 不接受编辑器的参数。它只是看着vscode.window.activeTextEditor

我的扩展是一个 Web 视图,当在 Web 视图上单击某些内容时,它会调用扩展 B。在那一刻,“活动选项卡”是网络视图,这不是activeTextEditor我想要的。

我想做类似的事情

vscode.window.activeTextEditor = editor
Run Code Online (Sandbox Code Playgroud)

在我的点击处理程序开始时,但这不起作用,因为activeTextEditor不是设置器。

我尝试对相关编辑器进行虚假编辑:

function changeFocus(editor: vscode.TextEditor) {
  return editor.edit((editBuilder) => {
    const pos = new vscode.Position(0, 0);
    const nxt = new vscode.Position(0, 1);
    editBuilder.insert(pos, "\\");
    editBuilder.delete(new vscode.Range(pos, nxt));
  });
}
Run Code Online (Sandbox Code Playgroud)

但这不会改变vscode.window.activeTextEditor变量(它仍然是undefined)。

Mar*_*ark 7

如果我理解正确,这将打开并聚焦另一个文件:

const currentWorkSpace = await vscode.workspace.getWorkspaceFolder(vscode.window.activeTextEditor.document.uri);

vscode.window.showTextDocument(vscode.Uri.joinPath(currentWorkSpace.uri, 'search/oldSearch.js'), { preview: false });
Run Code Online (Sandbox Code Playgroud)

它在先前保存的光标位置处聚焦且可写。

showTextDocument()还有另外两种形式,其中一种可以将 aTextDocument作为要打开的文件,而不是Uri.

如果您愿意,还openTextDocument()可以创建一个新的无标题文件。

如果文件已经打开,此代码仍将用于聚焦它,因此您拥有activeTextEditor.

  • 谢谢,这有帮助。我只是尝试使用 vscode.window.showTextDocument(editor.document.uri) 将焦点更改为我想要的文件。不幸的是,showTextDocument 在当前活动选项卡中打开文件,而不是将焦点更改到已打开文件的编辑器。我在 OP 中添加了一些有关我的用例的更多详细信息。 (2认同)