公共功能
公共功能对于你的插件来说是很重要的一个组成部分,几乎全部的插件都或多或少地使用了这些功能。下面是它们的使用方法。
命令
命令是 VS Code 工作的核心。通常你会在使用 VS Code 的过程中打开命令面板来执行命令,或者是使用指定的快捷键来调用命令,或是在右键菜单中间接调用命令。
对于命令,一个插件可以:
- 使用
vscode.commands
API 注册和调用命令。
- 使用
Contribute 配置项
,在配置文件中配置命令,让命令在命令面板中可用。
在 插件指南 / 命令 主题中可以学习更多关于命令的内容。
配置
插件可以使用 contributes.configuration
来配置插件独有的配置项,并可以使用 workspace.getConfiguration
API 来读取它们。
快捷键
插件可以添加自定义的快捷键。你可以在 contributes.keybindings
和 键位绑定 中查看更多关于自定义快捷键的内容。
右键菜单
插件可以注册自定义的右键菜单,并可以在 VS Code 界面上不同的位置点击右键时显示。你可以在 contributes.menus
配置项中查看更多内容。
数据存储
有 4 个位置可以用来存储数据:
ExtensionContext.workspaceState
:工作区存储,可以写入键值对。VS Code 对工作区存储进行管理,并会在再次打开相同工作区的时候保留上次存储的数据。
ExtensionContext.globalState
:全局存储,可以写入键值对。VS Code 对全局存储进行管理,并会在每次插件激活时保留存储过的数据。可以在globalState
上使用setKeysForSync
来管理哪些 key 需要同步。
ExtensionContext.storageUri
:一个工作区特定的存储位置,指向一个你的插件具有读写权限的本地目录。用于存储一些只能从当前工作区访问的大型文件。
ExtensionContext.globalStorageUri
:一个全局特定的存储位置,指向一个你的插件具有读写权限的本地目录。用于存储一些全部工作区都可以访问的大型文件。
插件的上下文环境在 插件入口文件 active
方法中是可用的。
setKeysForSync 示例
如果你的插件需要在不同设备之间保留一些用户状态,请使用 vscode.ExtensionContext.globalState.setKeysForSync
,将这些状态保存在 备份和同步设置 中。
你可以使用下面的示例:
// 当插件激活时
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.QuickPick
API 可以为用户提供便捷的输入体验,或者让用户在多个选项里选择其中之一。可以使用 快捷输入示例 快速了解这个 API。
文件选择器
插件可以使用 window.showOpenDialog
API 来打开一个系统的文件选择器,让用户选择文件或是文件夹。
输出通道
输出面板中显示了很多 输出通道
,输出通道是一个很好的展示日志的位置。你可以调用 window.createOutputChannel
API 来使用。
The Output Panel displays a collection of OutputChannel
, which are great for logging purpose. You can easily take advantage of it with the window.createOutputChannel
API.
进度 API
你可以使用 vscode.Progress
API 来为用户显示进度。
通过设置 ProgressLocation
选项,你可以让进度在不同的位置显示。
- 在提示区中
- 在版本控制区中
- 在 VS Code 窗口中的一般进度信息
进度 示例 更详细地解释了这个 API。