在 VS Code 中试试

常见功能

常见功能是构建扩展的重要基石。几乎所有扩展都使用其中的一些功能。以下是你可以如何利用它们的方法。

命令

命令是 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 示例演示了此 API。