激活事件

激活事件是您在扩展清单activationEvents字段中所做的一组 JSON 声明。当激活事件发生时,您的扩展将被激活。以下是所有可用激活事件的列表:package.json

package.json我们还提供了扩展清单中所有字段的参考。

语言上

每当打开解析为某种语言的文件时,就会发出此激活事件,并且将激活感兴趣的扩展。

...
"activationEvents": [
    "onLanguage:python"
]
...

onLanguage事件采用语言标识符值。

onLanguage可以使用数组中的单独条目来声明多种语言activationEvents

"activationEvents": [
    "onLanguage:json",
    "onLanguage:markdown",
    "onLanguage:typescript"
]
...

注意:从 VS Code 1.74.0 开始,您的扩展提供的语言不需要相应的onLanguage激活事件声明即可激活您的扩展。

此外,如果您的扩展程序需要在使用任何语言之前激活,您可以使用通用onLanguage激活事件来确保这一点:

"activationEvents": [
    "onLanguage"
]

注意:最佳做法是仅在用户需要您的扩展时才激活。如果您的扩展适用于一部分语言,则用户最好列出该子集,而不是在所有语言上激活。

指挥

每当调用命令时,都会发出此激活事件,并且将激活感兴趣的扩展:

...
"activationEvents": [
    "onCommand:extension.sayHello"
]
...

注意:从 VS Code 1.74.0 开始,您的扩展提供的命令不需要相应的onCommand激活事件声明即可激活您的扩展。

调试时

在调试会话开始之前,将发出此激活事件并激活感兴趣的扩展:

...
"activationEvents": [
    "onDebug"
]
...

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

调试初始配置

onDebugInitialConfigurationsprovideDebugConfigurations在调用的方法之前触发DebugConfigurationProvider

调试解决

onDebugResolve:type在调用指定类型resolveDebugConfiguration的方法之前触发。DebugConfigurationProvider

经验法则:如果调试扩展的激活是轻量级的,请使用onDebug. 如果是重量级的,则使用onDebugInitialConfigurations和/或onDebugResolve取决于是否DebugConfigurationProvider实现了相应的方法provideDebugConfigurations和/或resolveDebugConfiguration。有关这些方法的更多详细信息,请参阅使用 DebugConfigurationProvider 。

工作区包含

每当打开文件夹并且该文件夹至少包含一个与glob 模式匹配的文件时,就会发出此激活事件,并且将激活感兴趣的扩展。

...
"activationEvents": [
    "workspaceContains:**/.editorconfig"
]
...

文件系统上

每当读取特定方案中的文件或文件夹时,就会发出此激活事件,并且将激活感兴趣的扩展。这通常是file- 方案,但对于自定义文件系统提供程序,会出现更多方案,例如ftpssh

...
"activationEvents": [
    "onFileSystem:sftp"
]
...

视图

每当 VS Code 侧边栏中展开指定 id 的视图时,就会发出此激活事件,并激活感兴趣的扩展(扩展或源代码管理是内置视图的示例)。

只要具有 id 的视图nodeDependencies可见,就会触发下面的激活事件:

...
"activationEvents": [
    "onView:nodeDependencies"
]
...

注意:从 VS Code 1.74.0 开始,您的扩展贡献的视图不需要相应的onView激活事件声明即可激活您的扩展。

上Uri

每当打开该扩展的系统范围 Uri 时,就会发出此激活事件,并且将激活感兴趣的扩展。Uri 方案固定为vscodevscode-insiders。Uri 权限必须是扩展的标识符。Uri 的其余部分是任意的。

...
"activationEvents": [
    "onUri"
]
...

如果vscode.git扩展定义onUri为激活事件,则它将在以下任一 Uris 打开时被激活:

  • vscode://vscode.git/init
  • vscode://vscode.git/clone?url=https%3A%2F%2Fgithub.com%2FMicrosoft%2Fvscode-vsce.git
  • vscode-insiders://vscode.git/init(适用于 VS Code 内部人士)

在Webview面板上

每当 VS Code 需要恢复具有匹配的webview时,就会发出此激活事件,并且将激活感兴趣的扩展viewType

例如,下面的声明onWebviewPanel

"activationEvents": [
    "onWebviewPanel:catCoding"
]

当 VS Code 需要恢复 viewType: 的 webview 时,将导致扩展被激活catCoding。viewType 在调用中设置window.createWebviewPanel,您将需要另一个激活事件(例如 onCommand)来最初激活您的扩展并创建 Web 视图。

自定义编辑器

每当 VS Code 需要创建具有匹配的自定义编辑器时,就会发出此激活事件,并且将激活感兴趣的扩展viewType

例如,下面的声明onCustomEditor

"activationEvents": [
    "onCustomEditor:catCustoms.pawDraw"
]

当 VS Code 需要使用 viewType: 恢复自定义编辑器时,将导致扩展被激活catCustoms.pawDraw。viewType 在customEditors贡献点中设置并绑定到具有 的提供者registerCustomEditorProvider

注意:从 VS Code 1.74.0 开始,您的扩展贡献的自定义编辑器不需要相应的onCustomEditor激活事件声明即可激活您的扩展。

认证请求

authentication.getSession()每当扩展请求具有匹配的身份验证会话(通过 API)时,就会发出此激活事件,并且将激活感兴趣的扩展providerId

例如,下面的声明onAuthenticationRequest

"activationEvents": [
    "onAuthenticationRequest:github"
]

AuthenticationSession当 VS Code 需要检索of 类型时,将导致扩展被激活github

注意:从 VS Code 1.74.0 开始,您的扩展提供的身份验证提供程序不需要相应的onAuthenticationRequest激活事件声明来激活您的扩展。

启动完成时

此激活事件将在VS Code 启动后一段时间发出,并且感兴趣的扩展将被激活。这与激活事件类似*,但不会减慢 VS Code 的启动速度。*目前,此事件在所有激活的扩展完成激活后发出。

...
"activationEvents": [
    "onStartupFinished"
]
...

启动

*每当 VS Code 启动时,都会发出激活事件,并且会激活感兴趣的扩展。

注意:为了确保良好的用户体验,请仅当其他激活事件组合在您的用例中不起作用时,才请在您的扩展中使用此激活事件。

...
"activationEvents": [
    "*"
]
...

注意:一个扩展可以监听多个激活事件,这比监听"*".

注意:扩展必须activate()从其主模块导出一个函数,并且当发出任何指定的激活事件时,VS Code仅会调用该函数一次。此外,扩展应该deactivate()从其主模块导出一个函数,以便在 VS Code 关闭时执行清理任务。如果清理过程是异步的,则扩展必须返回 Promise 。如果清理同步运行,则deactivate()扩展可能会返回undefineddeactivate()