Skip to content

常用功能

常用功能对你的插件来说非常重要,几乎所有的都会或多或少地用到这些功能,下面我们为你简单地介绍一下它们。

命令

命令是VS Code 运作的核心。你可以打开命令面板执行,用快捷键执行,还可以在菜单中鼠标右键执行。

一个插件应该:

插件指南/命令中学习更多相关内容。

配置

插件需要在contributes.configuration配置点配置点package.json的一部分,用于配置插件启动命令、用户可更改的插件配置,可以理解为插件的主要配置文件。点中填写有关的配置,你可以workspace.getConfigurationAPI中阅读有关内容。

键位绑定

插件可以添加自定义键位映射,在contributes.keybindings键位绑定中了解更多有关内容。

菜单

插件可以自定义上下文菜单项,菜单会根据用户右击VS Code UI的不同位置而各不相同。查看更多contributes.menus配置点配置点package.json的一部分,用于配置插件启动命令、用户可更改的插件配置,可以理解为插件的主要配置文件。

数据储存

VS Code中有三种数据储存方式:

  • ExtensionContext.workspaceState:键值对组成的工作区数据。当同一个工作区再次打开时会重新取出数据。
  • ExtensionContext.globalState:键值对组成的全局数据。当插件激活时会再次取出这些数据。
  • ExtensionContext.storageUri:指向本地目录的工作区专用存储 URI,插件对该目录拥有读写权限。如果需要存储只能由当前工作区访问的大型文件,这是一个合适的选择。
  • ExtensionContext.globalStorageUri:指向本地目录的全局存储 URI,插件对该目录拥有读写权限。如果需要存储可供所有工作区访问的大型文件,这是一个合适的选择。
  • ExtensionContext.secrets:用于存储密钥或其他敏感信息的全局存储,存储内容会被加密,且不会在不同设备之间同步。对于桌面版 VS Code,它使用 Electron 的 safeStorage API;对于网页版 VS Code,它使用双密钥加密(Double Key Encryption,DKE)实现。

插件的执行上下文在activate函数中,详见插件入口文件

setKeysForSync 示例

如果你的插件需要在不同设备之间保留部分用户状态,请使用 vscode.ExtensionContext.globalState.setKeysForSync 将该状态提供给设置同步

你可以使用以下模式:

TypeScript
// 激活时
const versionKey = 'shown.version';
context.globalState.setKeysForSync([versionKey]);

// 稍后显示页面时
const currentVersion = context.extension.packageJSON.version;
const lastVersionShown = context.globalState.get(versionKey);
if (isHigher(currentVersion, lastVersionShown)) {
    context.globalState.update(versionKey, currentVersion);
}

通过共享已关闭或已查看标记,在不同设备之间共享状态可以避免用户多次看到欢迎页或更新页。

显示通知

几乎所有的插件都需要在某些时候为用户提示信息。VS Code提供了3个API来展示不同重要程度的信息:

快速选择

使用vscode.QuickPickAPI,你可以轻松地收集用户输入或者为用户显示选择列表。快速输入 示例将详细解释这个API。

文件选择

插件可以使用window.showOpenDialogAPI打开系统文件选择器,然后选择文件或是文件夹。

输出渠道

输出面板显示了一组输出渠道,以便于你查看日志。你可以使用window.createOutputChannel创建一个新的输出渠道。

进度API

使用vscode.Progress将处理进度报告给用户。

通过ProgressLocation选项,进度可以显示在不同的区域:

  • 显示在通知区
  • 显示在源控制视图
  • VS Code窗口中的通用进度条位置

详见进度 示例