【问题标题】:Vscode extension, setting window.activeTextEditorvscode扩展,设置window.activeTextEditor
【发布时间】:2020-11-12 05:08:02
【问题描述】:

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

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

我的扩展是一个 webview,当在 webview 上点击某些东西时它会调用 Extension B。在那一刻,“活动标签”是 web 视图,这不是我想要的 activeTextEditor。

我想做类似的事情

vscode.window.activeTextEditor = editor

在我的点击处理程序开始时,但这不起作用,因为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));
  });
}

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

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

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

    const currentWorkSpace = await vscode.workspace.getWorkspaceFolder(vscode.window.activeTextEditor.document.uri);
    
    vscode.window.showTextDocument(vscode.Uri.joinPath(currentWorkSpace.uri, 'search/oldSearch.js'), { preview: false });
    

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

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

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

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

    【讨论】:

    • 谢谢,这有帮助。我刚刚尝试使用 vscode.window.showTextDocument(editor.document.uri) 将焦点更改为我想要的文件。不幸的是 showTextDocument 在当前活动的选项卡中打开文件,而不是将焦点更改为已经打开文件的编辑器。我在 OP 中添加了有关我的用例的更多详细信息。
    • 好的,我搞定了:vscode.window.showTextDocument(editor.document.uri, { preview: false, viewColumn: editor.viewColumn, });谢谢!
    • @AnttiS。这几天一直在用你的技术。这很棒。在文档中很难找到/重新找到这种东西!
    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 2017-08-10
    • 2017-06-29
    相关资源
    最近更新 更多