是否可以在 VSCode 中的扩展之间调用命令?

Posted

技术标签:

【中文标题】是否可以在 VSCode 中的扩展之间调用命令?【英文标题】:Is it possible to call commands between extensions in VSCode? 【发布时间】:2017-05-24 09:21:50 【问题描述】:

比如有两个VSCode扩展:

extension1 已注册命令 exCommand1 extension2 已注册命令 exCommand2

根据文档,VSCode 扩展可以调用命令 (参考:https://code.visualstudio.com/docs/extensionAPI/vscode-api)

executeCommand<T>(command: string, ...rest: any[]): Thenable<T | undefined>

如果 API Doc 正确,那么

extension1可以拨打exCommand2extension2提供 extension2 可以拨打exCommand1 提供的extension1

但是,VSCode 的扩展是延迟加载的,那么如何从另一个可能尚未加载的扩展调用命令呢?

【问题讨论】:

【参考方案1】:

我知道这是一个旧帖子,如果您仍然有相同的要求或其他人在谷歌上搜索,我就是这样做的。

var xmlExtension =  vscode.extensions.getExtension( 'DotJoshJohnson.xml' );

// is the ext loaded and ready?
if( xmlExtension.isActive == false )
    xmlExtension.activate().then(
        function()
            console.log( "Extension activated");
            // comment next line out for release
            findCommand(); 
            vscode.commands.executeCommand("xmlTools.formatAsXml");
        ,
        function()
            console.log( "Extension activation failed");
        
    );   
 else 
    vscode.commands.executeCommand("xmlTools.formatAsXml");



// dev helper function to dump all the command identifiers to the console
// helps if you cannot find the command id on github.
var findCommand = function()
    vscode.commands.getCommands(true).then( 
        function(cmds)
            console.log("fulfilled");
            console.log(cmd);
        ,
        function() 
            console.log("failed");
            console.log(arguments);
        
    )
;

【讨论】:

对我来说,一个简短的绊脚石是弄清楚究竟要传递给vscode.extensions.getExtension()。要获取扩展 ID 列表,您可以使用 vscode.extensions.all.map(x =&gt; x.id)。它们的形式为&lt;extension publisher&gt;.&lt;extension name&gt; 我不是回答这个问题的人。您可以尝试将它们作为第二个参数 vscode.commands.executeCommand("xmlTools.formatAsXml", HERE); 传递,但不知道它是否适用于扩展。

以上是关于是否可以在 VSCode 中的扩展之间调用命令?的主要内容,如果未能解决你的问题,请参考以下文章

删除 vscode 中的引号或在引号和无引号之间切换

如何以编程方式安装所有VSCode工作区扩展

如何更改 vscode 的 VIM 扩展中的光标键

在 vscode 扩展中订阅命令的目的?

vscode离线方式安装的插件没有应用的按钮

在 VSCode 扩展中找不到命令