常用功能
常用功能是扩展的重要构建块。几乎所有扩展都会使用其中的一些功能。以下是如何利用这些功能的方法。
命令
命令是 VS Code 工作方式的核心。您打开命令面板来执行命令,将自定义按键绑定到命令,然后右键单击以在上下文菜单中调用命令。
一个扩展可以
- 使用
vscode.commands
API 注册和执行命令。 - 使用
contributes.commands
贡献点使命令在命令面板中可用。
在 扩展指南 / 命令 主题中了解有关命令的更多信息。
配置
扩展可以使用 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 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,您可以轻松收集用户输入或让用户从多个选项中进行选择。QuickInput 示例说明了该 API。
文件选择器
扩展可以使用 window.showOpenDialog
API 打开系统文件选择器并选择文件或文件夹。
输出通道
输出面板显示 OutputChannel
的集合,这非常适合用于日志记录目的。您可以使用 window.createOutputChannel
API 轻松利用它。
进度 API
您可以使用 vscode.Progress
API 向用户报告进度更新。
可以使用 ProgressLocation
选项在不同的位置显示进度
- 在通知区域中
- 在源代码控制视图中
- VS Code 窗口中的常规进度
进度示例说明了此 API。