尝试以扩展 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。对于 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,您可以轻松收集用户输入或让用户从多个选项中进行选择。QuickInput 示例演示了此 API。

文件选择器

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

输出通道

输出面板显示 OutputChannel 的集合,非常适合日志记录。您可以使用 window.createOutputChannel API 轻松利用它。

进度 API

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

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

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

进度示例演示了此 API。