常见功能
常见功能是扩展的重要构建块。几乎所有扩展都使用其中一些功能。下面是你可以利用这些功能的方法。
命令
命令是 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 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。