VS Code扩展:从命令面板中隐藏命令

14

背景:

我目前正在开发一个简单的 VS Code 扩展,它将为我的构建和调试任务提供动态设置的命令变量。计划是创建一系列属性,通过 "${command:extension.myCommand}" 语法在 launch.json 等文件中访问。

像这样注册命令非常简单,只需要在 package.json 文件中添加一个条目,例如:

"contributes": {
    "commands": [
        {
            "command": "extension.myCommand",
            "title": ""
        }
    ]
}

并在我的主扩展文件中实现相应的命令:

let disposable = vscode.commands.registerCommand('extension.myCommand', () => {
    return "dynvar";
});
context.subscriptions.push(disposable);

问题:

不幸的是,这些命令现在也出现在命令面板中,而它们没有任何交互使用,这很烦人。

问题:

是否有办法隐藏通过扩展贡献的命令,使其不显示在VS Code的命令面板中?

2个回答

18

如果您不需要在命令中关联 "icon""title",则可以从 "commands" 中简单地省略它 - 只要已通过 vscode.commands 注册,未列出在其中的命令仍然可以被调用。

否则,您可以使用以下技巧将其隐藏在命令板中:

"contributes": {
    "menus": {
        "commandPalette": [
            {
                "command": "extension.myCommand",
                "when": "false"
            }
        ]
    }
}

可以,谢谢!顺便说一下,似乎我也可以将“contributes”部分留空,命令仍然可以通过命令变量调用。但是,这可能是一种hack而不是正确的做法,因此我将其标记为规范答案。 - Glutanimate
3
我不认为那一定是一个 hack,你确实不需要在 package.json 中注册一个命令才能调用它。 "when": "false" 主要用于在 UI/按钮中使用的命令,但不应该在命令面板中显示。在这种情况下,您还需要设置 "title""icon"。我会使用这些信息更新我的答案。 - Gama11
当我尝试从JS/TS中使用 registerCommand/registerTextEditorCommand 注册一个在 "menus": 中的命令,但未在 package.json 中添加到 "commands": 中时,我会收到一个菜单项引用了 '命令名称' 命令,该命令在 'commands' 部分中未定义的错误提示。 - user3064538

2
下面的片段演示了如何隐藏注册为“extension.myHiddenCommand”的命令:
"contributes": {
    "commands": [
    {
        "command": "extension.myHiddenCommand",
        "title": "Compile folder"
    }],
    "menus": {
        "commandPalette": [
        {
            "command": "extension.myHiddenCommand",
            "when": "false"
        }]
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接