vscode插件教程:command

2,008 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

package.json

对插件的详细描述,我们先关注以下的字段:

{
  "name": "test-plugin",
  "main": "./out/extension.js",
  "activationEvents"["*"],
  "contributes":{
    "commands":[
      {
        "command": "test-plugin.helloWorld",
        "title": "Hello World"
      }
    ]
  }
  // ...
}

  • name :插件的名字
  • main:入口地址
  • commands:插件所有可以使用的命令
    • command:当触发命令时,发送的消息名字,格式为{name}.{cmd}
    • title:命令的标题,我们输入命令的时候就是以这个字段为准。
  • activationEvents:激活可用的事件列表,格式为:{event}:{value}

activationEvents

设置激活插件的事件,当插件激活时会调用入口的activate函数,插件默认是没有激活的。

vscode提供了非常多的事件类型,比如onLanguageonCommandonView等。

command举例,需要按照这样的格式书写

"activationEvents": [
    "onCommand:test-plugin.helloWorld"
],

其中commandcontributes.commands中的某一项值。

当使用命令模式,输入Hello World,触发command的时候,插件就会激活。

注意事项

如果未声明在activationEvents中的命令被触发,就会出现一下警告:

这个警告让初为新手的我困惑了好长时间,算是一个注意点。

如果不想过滤任何事件,可以暴力的设置为*即可

{
  "activationEvents": ["*"]
}

command的逻辑实现

package.json中我们仅仅定义了commandcommand触发的逻辑在src/extension.ts中:

export function active (context) {
  context.subscriptions.push(
    vscode.commands.registerCommand(
      'test-plugin.helloWorld', // 注意这个参数,必须和packages.json中的command一致
      () => {
        // command的具体逻辑
        vscode.window.showInformationMessage('Hello World!');
      }
    )
  );
}

注释说明的也比较清晰啦,大概这样子,我们就可以看到命令执行后,弹出一个Hello World的提示语。

总结

通过上边的学习,我们会发现以下2处的需要完全一致,而且都是{plugin-name}.{value}的格式。

那么我们不遵守这个格式,只要保证一致是否可以正常工作呢?答案是:完全可以。

但为什么官方的例子里面都是使用{plugin-name}.{value}的格式呢?

以我个人经验,为了防止不同插件重名出现未知的问题,插件名字在整个生态是唯一的,以plugin-name开头,能够保证唯一性。

so,那我可不可以A插件调用B插件的命令呢?

如果你有这个想法,说明你已经对插件的理解又高人一步了!