VSCode扩展ID分配时机及自定义右键菜单仅自身标签显示问题
VSCode扩展自定义右键菜单:仅在自身创建的标签显示
一、关于Extension ID的说明
- Extension ID不是发布时自动分配,而是由你在
package.json中通过publisher和name字段组合生成,格式为{publisher}.{name} - 命名规范:
publisher是你在VS Code Marketplace注册的唯一发布者账号名称name是你的扩展名称,要求小写,可使用连字符(-)或下划线(_),不能包含空格、特殊符号
- 示例:若你的
package.json配置如下:
对应的Extension ID就是{ "publisher": "my-publisher", "name": "my-custom-extension" }my-publisher.my-custom-extension
二、修正右键菜单的显示条件
你当前使用的when: "extension == 'xxxx.xxxx'"无法实现“仅在自身扩展创建的标签显示”的需求,因为该上下文并非用于判断活动标签的归属。正确做法是自定义上下文变量:
在扩展代码中,创建并激活自身标签时设置自定义上下文:
import * as vscode from 'vscode'; // 创建自定义标签后执行此代码,标记当前标签属于你的扩展 vscode.commands.executeCommand('setContext', 'myExtension.isOwnTab', true); // 监听标签切换事件,动态更新上下文状态 vscode.window.onDidChangeActiveTextEditor(editor => { if (editor && /* 这里判断editor是否是你的扩展创建的,比如检查uri scheme或文档元数据 */) { vscode.commands.executeCommand('setContext', 'myExtension.isOwnTab', true); } else { vscode.commands.executeCommand('setContext', 'myExtension.isOwnTab', false); } });在
package.json的菜单配置中使用该自定义上下文:"contributes": { "menus": { "editor/context": [ { "command": "qwget.qwget", "when": "myExtension.isOwnTab == true" } ] } }
三、补充说明
- 判断标签归属:如果是自定义编辑器,可通过
editor.document.uri.scheme识别(比如你自定义的scheme为my-extension-scheme),或通过文档的自定义元数据标记 - 自定义上下文变量建议添加扩展前缀,避免与其他扩展冲突
内容的提问来源于stack exchange,提问作者rkinca
相关产品推荐
相关产品推荐

