Visual studio code 如果扩展未激活,如何防止显示命令?

Visual studio code 如果扩展未激活,如何防止显示命令?,visual-studio-code,vscode-extensions,Visual Studio Code,Vscode Extensions,我正在编写一个扩展,并提供一个自定义命令,在package.json中声明为: { "contributes": { "commands": [ { "command": "myext.doSomething", "title": "Do something" } ] } } 我正在扩展中注册它,当它激活时: commands.registerCommand("myext.doSomething", () =>

我正在编写一个扩展,并提供一个自定义命令,在
package.json
中声明为:

{
  "contributes": {
    "commands": [
      {
        "command": "myext.doSomething",
        "title": "Do something"
      }
    ]
  }
}
我正在扩展中注册它,当它激活时:

commands.registerCommand("myext.doSomething", () => console.log("hi"))
这是可行的,但即使扩展未激活,命令选项板中也会出现
执行操作
命令

这意味着,如果用户在扩展未激活时选择该命令,则会出现以下错误:

未找到命令
myext.doSomething


有没有办法防止自定义命令显示在命令选项板中,除非扩展已被激活?

如果扩展未激活,您可以将其添加到
包.json中的类似命令中,而不是不显示您的命令。就你而言:

{
“激活事件”:[
“onCommand:myext.doSomething”
]
}
这将在调用命令之前运行扩展插件的导出的
activate
功能

关键字也可以是您的一个选项。我就这个话题回答了一个类似的问题

编辑
通过另外提供上下文菜单(),可以控制命令在命令托盘中的可见性。例如,您只能在编辑器文件具有特定语言id时显示该命令。
例如:

{
“菜单”:{
“命令调色板”:[
{
“命令”:“myext.doSomething”,
“当”:“editorLangId==scala”
}
]
}
}

谢谢,但我不想在命令运行时启动扩展。只有当当前激活事件触发时,扩展才有意义,因此它缺少正确运行命令的上下文。另外,
when
关键字仅适用于上下文菜单,不适用于命令。刚刚找到。它显示了如何使用
when
关键字控制命令的可见性。因此,诀窍是在命令Pallete中添加上下文菜单。我不知道这是否有助于您的扩展尚未激活。不过,也许值得一试。谢谢!这确实有效,我能够将命令范围限定到所需的
编辑器angid
。如果你在回答中包含了这个解释,我会把它标记为接受!