vscode插件运行时创建editor/context贡献点
时间: 2023-10-30 08:07:25 浏览: 134
在 VS Code 插件中,可以通过 `vscode.commands.registerCommand` API 注册一个命令,然后在命令被执行时创建 `vscode.TextEditor` 实例,并在该实例上创建 `vscode.ExtensionContext` 实例,从而实现 editor/context 的贡献点。
以下是一个示例代码:
```javascript
const vscode = require('vscode');
function activate(context) {
// 注册命令
let disposable = vscode.commands.registerCommand('extension.exampleCommand', () => {
// 创建 TextEditor 实例
const editor = vscode.window.activeTextEditor;
if (!editor) {
return;
}
// 创建 ExtensionContext 实例
const extensionContext = {
subscriptions: context.subscriptions,
globalState: context.globalState,
workspaceState: context.workspaceState,
asAbsolutePath: (relativePath) => context.asAbsolutePath(relativePath),
storagePath: context.storagePath,
logPath: context.logPath,
globalStoragePath: context.globalStoragePath,
globalStorageUri: context.globalStorageUri,
extensionUri: context.extensionUri,
extensionPath: context.extensionPath,
environmentVariableCollection: context.environmentVariableCollection,
extensionMode: context.extensionMode,
secrets: context.secrets,
extension: context.extension
};
// 触发 editor/context 贡献点
vscode.commands.executeCommand('vscode.openWith', editor.document.uri, 'my.extension.id', extensionContext);
});
context.subscriptions.push(disposable);
}
exports.activate = activate;
```
在上面的代码中,我们注册了一个名为 `extension.exampleCommand` 的命令,在命令被执行时获取当前活动的 `TextEditor` 实例,并创建一个包含所有 `ExtensionContext` 属性的对象,最后触发 `vscode.openWith` 命令,并将 `TextDocument` 的 URI、扩展 ID 和 `ExtensionContext` 对象作为参数传递给该命令。这将触发 `editor/context` 贡献点,并将 `ExtensionContext` 对象传递给所有已注册的 `editor/context` 贡献点处理程序。
阅读全文