You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode扩展ID分配时机及自定义右键菜单仅自身标签显示问题

VSCode扩展自定义右键菜单:仅在自身创建的标签显示

一、关于Extension ID的说明

  • Extension ID不是发布时自动分配,而是由你在package.json中通过publisher和name字段组合生成,格式为{publisher}.{name}
  • 命名规范:
    • publisher是你在VS Code Marketplace注册的唯一发布者账号名称
    • name是你的扩展名称,要求小写,可使用连字符(-)或下划线(_),不能包含空格、特殊符号
  • 示例:若你的package.json配置如下:
    {
      "publisher": "my-publisher",
      "name": "my-custom-extension"
    }
    
    对应的Extension ID就是my-publisher.my-custom-extension

二、修正右键菜单的显示条件

你当前使用的when: "extension == 'xxxx.xxxx'"无法实现“仅在自身扩展创建的标签显示”的需求,因为该上下文并非用于判断活动标签的归属。正确做法是自定义上下文变量:

  1. 在扩展代码中,创建并激活自身标签时设置自定义上下文:

    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);
      }
    });
    
  2. 在package.json的菜单配置中使用该自定义上下文:

    "contributes": {
      "menus": {
        "editor/context": [
          {
            "command": "qwget.qwget",
            "when": "myExtension.isOwnTab == true"
          }
        ]
      }
    }
    

三、补充说明

  • 判断标签归属:如果是自定义编辑器,可通过editor.document.uri.scheme识别(比如你自定义的scheme为my-extension-scheme),或通过文档的自定义元数据标记
  • 自定义上下文变量建议添加扩展前缀,避免与其他扩展冲突

内容的提问来源于stack exchange,提问作者rkinca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:52:08