通用功能

通用功能是您扩展的重要构建块。几乎所有扩展都使用其中的一些功能。以下是您如何利用它们的方法。

命令

命令是VS Code工作的核心。您可以通过打开命令面板来执行命令,将自定义快捷键绑定到命令,以及右键点击在上下文菜单中调用命令。

扩展可以:

了解更多关于命令的信息,请访问扩展指南 / 命令主题。

配置

扩展可以通过contributes.configuration贡献点贡献特定于扩展的设置,并使用workspace.getConfiguration API读取它们。

键绑定

扩展可以添加自定义键绑定。更多信息请参阅contributes.keybindings键绑定主题。

上下文菜单

扩展可以注册自定义的上下文菜单项,这些菜单项将在VS Code UI的不同部分右键点击时显示。更多信息请参阅contributes.menus贡献点。

数据存储

存储数据有五种选项:

  • ExtensionContext.workspaceState: 一个工作区存储,您可以在其中写入键/值对。VS Code 管理此存储,并在再次打开同一工作区时恢复它。
  • ExtensionContext.globalState: 一个全局存储,您可以在其中写入键/值对。VS Code 管理此存储,并在每次扩展激活时恢复它。您可以通过在 globalState 上使用 setKeysForSync 方法设置同步键,选择性地同步全局存储中的键/值对。
  • ExtensionContext.storageUri: 一个指向本地目录的工作区特定存储URI,您的扩展程序在此目录中具有读写权限。如果您需要存储只能从当前工作区访问的大文件,这是一个不错的选择。
  • ExtensionContext.globalStorageUri: 一个指向本地目录的全局存储URI,您的扩展程序在此目录中具有读写权限。如果您需要存储可从所有工作区访问的大文件,这是一个不错的选择。
  • ExtensionContext.secrets: 用于存储加密的机密信息(或任何敏感信息)的全局存储。这些信息不会在机器之间同步。对于VS Code桌面版,这利用了Electron的safeStorage API。对于VS Code网页版,这使用了双密钥加密(DKE)实现。

扩展上下文在扩展入口文件中的activate函数中可用。

setKeysForSync 示例

如果你的扩展需要在不同机器之间保留一些用户状态,那么使用vscode.ExtensionContext.globalState.setKeysForSync将状态提供给设置同步

您可以使用以下模式:

// on activate
const versionKey = 'shown.version';
context.globalState.setKeysForSync([versionKey]);

// later on show page
const currentVersion = context.extension.packageJSON.version;
const lastVersionShown = context.globalState.get(versionKey);
if (isHigher(currentVersion, lastVersionShown)) {
    context.globalState.update(versionKey, currentVersion);
}

通过共享已关闭或已查看的标志,跨机器共享状态可以帮助避免用户看到多个欢迎或更新页面实例的问题。

显示通知

几乎所有扩展都需要在某个时刻向用户展示信息。VS Code 提供了三个 API 来显示不同严重程度的通知消息:

快速选择

使用vscode.QuickPick API,您可以轻松收集用户输入或让用户从多个选项中进行选择。QuickInput示例展示了该API的使用。

文件选择器

扩展可以使用 window.showOpenDialog API 来打开系统文件选择器并选择文件或文件夹。

输出通道

输出面板显示一组OutputChannel,非常适合用于日志记录。你可以轻松地通过window.createOutputChannel API 来利用它。

进度 API

你可以使用vscode.Progress API向用户报告进度更新。

可以使用ProgressLocation选项在不同的位置显示进度:

  • 在通知区域
  • 在源代码控制视图中
  • VS Code 窗口中的总体进度

Progress sample 示例展示了这个API。