激活事件

激活事件是在package.json中的activationEvents字段声明的一个JSON对象, 参考插件清单. 当激活事件触发时, 插件就会被激活. 下面是可用的激活事件列表:

package.json的配置项都可以在插件清单中找到.

onLanguage


打开特定语言文件时激活事件和相关插件

  1. ...
  2. "activationEvents": [
  3. "onLanguage:python"
  4. ]
  5. ...

onLanguage事件需要指定特定的语言标识符

也可以添加多种语言:

  1. "activationEvents": [
  2. "onLanguage:json",
  3. "onLanguage:markdown",
  4. "onLanguage:typescript"
  5. ]

onCommand


调用命令时激活

  1. ...
  2. "activationEvents": [
  3. "onCommand:extension.sayHello"
  4. ]
  5. ...

onDebug


调试会话(debug session)启动前激活

  1. ...
  2. "activationEvents": [
  3. "onDebug"
  4. ]
  5. ...

onDebugInitialConfigurations

onDebugResolve

这是两个粒度更细的onDebug激活事件:

  • DebugConfigurationProvider中的provideDebugConfigurationsonDebugInitialConfigurations之后触发
  • onDebugResolve:typeDebugConfigurationProviderresolveDebugConfiguration方法之前触发.

友情提示: 如果调试插件比较轻量, 使用onDebug. 相反, 根据DebugConfigurationProvider实现的对应方法(provideDebugConfigurationsresolveDebugConfiguration),使用onDebugInitialConfigurationsonDebugResolve. 参阅使用调试器插件.

workspaceContains


文件夹打开后,且文件夹中至少包含一个符合glob模式的文件时触发.

  1. "activationEvents": [
  2. "workspaceContains:**/.editorconfig"
  3. ]

onFileSystem


以协议(scheme)打开文件或文件夹时触发。通常是file-协议,也可以用自定义的文件供应器函数替换掉,比如ftpssh.

  1. ...
  2. "activationEvents": [
  3. "onFileSystem:sftp"
  4. ]
  5. ...

onView


指定id的视图展开时触发:

  1. ...
  2. "activationEvents": [
  3. "onView:nodeDependencies"
  4. ]
  5. ...

onUri


插件的系统级URI打开时触发。这个URI协议需要带上vscode或者 vscode-insiders协议。URI主机名必须是插件的唯一标识,剩余的URI是可选的。

  1. ...
  2. "activationEvents": [
  3. "onUri"
  4. ]
  5. ...

如果vscode.git插件定义了onUri激活事件,那么下列任意URI打开时就会触发:

  • vscode://vscode.git/init
  • vscode://vscode.git/clone?url=https%3A%2F%2Fgithub.com%2FMicrosoft%2Fvscode-vsce.git
  • vscode-insiders://vscode.git/init(for VS Code Insiders)

onWebviewPanel


VS Code需要恢复匹配到viewTypewebview视图时触发.

下面是一个例子:

  1. "activationEvents": [
  2. ...,
  3. "onWebviewPanel:catCoding"
  4. ]

这会导致插件被激活. 调用window.createWebviewPanel时可以设置viewType, 你可能会需要其它的激活事件(比如: onCommand)来创建webview视图.

Start up


当VS Code启动时触发。为了保证良好的用户体验,只在你的插件没有其他任何激活事件的前提下,添加这个激活事件。

  1. ...
  2. "activationEvents": [
  3. "*"
  4. ]
  5. ...

!> 注意: 一个插件如果侦听了多个激活事件, 那么最好用"*"替换掉.

!> 注意: 插件必须从它的主模块中输出一个activate()函数,当任意的激活事件触发时,VS Code会仅仅调用一次这个函数。此外,插件也应该 导出一个deactivate()函数,当VS Code关闭时执行清理的任务。如果清理进程是异步的,插件的deactivate()必须返回一个Promise。如果这个清理任务是同步的,那么deactivate()可以返回undefined