我正在编写一个扩展,并提供一个自定义命令,在package.json
中声明为:
{
"contributes": {
"commands": [
{
"command": "myext.doSomething",
"title": "Do something"
}
]
}
}
然后我在扩展中注册它,当它激活时:
commands.registerCommand("myext.doSomething", () => console.log("hi"))
这是有效的,但即使扩展插件未处于活动状态,Do Something
命令也会出现在命令选项板中。
这意味着,如果用户在扩展未激活时选择命令,则沿线会出现错误
未找到命令
myext.doSomething
是否有一种方法可以防止自定义命令显示在命令选项板中,除非已激活扩展?
扩展不活动时不显示命令,只需在package.json
中将其添加到activationEvents
即可。在您的情况下:
{
"activationEvents": [
"onCommand:myext.doSomething"
]
}
这将在调用命令之前运行扩展的导出activate
函数。
此外,when
关键字可能是您的一个选项。我在这里回答了一个类似的问题。
编辑:
您可以通过额外提供上下文菜单(文档(来控制命令托盘中命令的可见性。例如,只有当编辑器的文件具有特定的语言id时,才能显示命令。
示例:
{
"menus": {
"commandPalette": [
{
"command": "myext.doSomething",
"when": "editorLangId==scala"
}
]
}
}