现已推出!阅读 10 月份的新功能和修复。

常用功能

常用功能是扩展的重要构建块。几乎所有扩展都使用了一些这些功能。以下是如何利用它们。

命令

命令是 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 for the Web,这使用的是双重密钥加密 (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,您可以轻松地收集用户输入或让用户从多个选项中进行选择。 快速输入示例 说明了 API。

文件选择器

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

输出通道

输出面板显示了一组 OutputChannel,这些通道非常适合日志记录。您可以轻松地使用 window.createOutputChannel API 利用它。

进度 API

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

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

  • 在通知区域
  • 在源代码管理视图中
  • VS Code 窗口中的通用进度

进度示例 说明了此 API。