头图

vscode插件开发中文文档教程(5)——扩展的通用功能

原文链接:Common Capabilities
作者:Microsoft
译者:倔强青铜三

前言

大家好,我是倔强青铜三。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

扩展的通用功能

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

命令

命令是 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。对于 Web 版的 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,您可以轻松收集用户输入,或让用户从多个选项中进行选择。快速输入示例 展示了该 API。

文件选择器

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

输出通道

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

进度 API

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

通过 ProgressLocation 选项,可以在不同位置显示进度:

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

进度示例 展示了此 API。

最后感谢阅读!欢迎关注我,微信公众号倔强青铜三。欢迎点赞收藏关注,一键三连!!!

倔强青铜三
41 声望0 粉丝