编写 VS Code 扩展时如何聚焦自定义视图?

How to focus a custom view when writing a VS Code extension?

我的 VS Code 扩展需要帮助。我已经编写了一个工作正常的自定义视图,但是我想通过使用键盘快捷键或上下文菜单命令来激活/聚焦/进入该视图。我无法找到如何使用 VS 代码 API 来实现这一点。

context.subscriptions.push(vscode.commands.registerCommand('extensionId.showView', () =>
{   
    // how to do that?
}));

我知道这是可以做到的,因为可以使用以下代码 snppet:

来显示文件资源管理器
vscode.commands.executeCommand('workbench.view.search');

但是对于自定义树视图,您将如何做到这一点?

您应该可以使用 new focus option that was added to TreeView.reveal() in 1.25 来做到这一点。该方法要求您传递要显示的树项,因此它更像是一种无法直接聚焦视图本身的解决方法,但您可以简单地传递第一个/根节点。

treeView.reveal(item, {focus: true});

请注意,本例中的焦点是指键盘焦点。如果您只是想将其显示出来,调用 reveal() 而不使用 focus 选项就足够了。

要获取 TreeView 实例,您需要使用您的视图 ID 和提供程序调用 vscode.window.createTreeView()

我觉得,用

也是可以的
vscode.commands.executeCommand("exampleView.focus")

使用 package.json:

中声明的 exampleView
...
"views": {
            "exampleView": [
                {
                    "id": "exampleView",
                    "name": "Example View"
                }
            ]
        },
...

正如@Empiire所说,焦点命令的形式为:vscode.commands.executeCommand

并在 package.json 中声明的视图 ID 末尾添加“.focus”!

您还可以提供一个对象作为参数,例如 { preserveFocus: true } 以在不干扰当前焦点的情况下显示。

eamodio 在 gitlens 中这样做:https://github.com/gitkraken/vscode-gitlens/blob/417587d0dfcda89e9e2d723f8b662d7cf9008c8f/src/webviews/webviewViewBase.ts#L85