跳到主要内容

激活事件

激活事件写在 package.json 的 activationEvents 里。事件发生时,声明了它的扩展才会被加载,然后调用一次 activate。

常见事件​

事件何时触发
onLanguage:python打开解析成该语言的文件
onLanguage任意语言被使用前。范围很大,能收窄就收窄
onCommand:ext.sayHello该命令被调用
onView:myView指定视图被展开
onUri打开 vscode://发布者.扩展名/...
onWebviewPanel:viewType需要恢复这个 viewType 的网页面板
onCustomEditor:viewType需要创建或恢复自定义编辑器
onFileSystem:sftp读取该 scheme 的文件或文件夹
workspaceContains:**/.editorconfig打开的文件夹里有匹配 glob 的文件
onDebug调试会话开始前。重的调试扩展应改用更细的 onDebugInitialConfigurations / onDebugResolve
onTaskType:npm需要列出或解析该类型任务
onNotebook:jupyter-notebook打开指定笔记本类型
onTerminal:bash打开指定 shell 类型的终端
onAuthenticationRequest:github有人向该认证提供方要会话
onStartupFinished启动完成之后。比 * 晚,不拖启动
*编辑器一启动就激活。官方要求只有没有任何别的组合能满足时才用

另外还有 onChatParticipant、onLanguageModelTool、onWalkthrough、onSearch、onRenderer、onEditSession、onOpenExternalUri、onIssueReporterOpened 等,名字和触发点是对应的。

1.74 之后的隐式激活​

从 1.74.0 起,扩展自己贡献的这些能力不再强制手写激活事件:

  • onCommand(贡献了 commands)
  • onLanguage(贡献了 languages)
  • onView(贡献了 views)
  • onCustomEditor
  • onAuthenticationRequest(贡献了 authentication)

onTaskType 从 1.76.0 起,对自己贡献的任务同样可以省略。

隐式激活只管「你在 contributes 里声明过的那些 ID」。下面这些仍然要自己写:

  • onStartupFinished、*、workspaceContains、onUri、onFileSystem
  • onWebviewPanel:第一次打开通常靠命令激活,重启后要靠它把面板恢复回来
  • 监听别人扩展的命令或语言

activationEvents 可以是空数组。面向 1.74 以前的 engines.vscode 时,命令仍要写 onCommand:...。

参考​