VSCode 扩展开发之子菜单

前言

摸鱼派首帖,分享一点最近收获。开发 VSCode 扩展时遇到了添加右键二级菜单的问题,看了官方文档之后依然不得其解。反复实验之后终于理解文档所言,故整理分享。

右键菜单

在开始之前,先讲一下如何添加右键菜单。右键菜单的添加是很简单的。只要配置 package.json 中的 menuseditor/context 添加 command 绑定即可。例如:

{
    "menus": {
        "editor/context": [
            {
                "command": "markdown-image.paste",
                "when": "editorLangId == markdown",
                "group": "9_cutcopypaste@4"
            }
        ]
    },
}

一个右键菜单包含三个属性:

  • command : 这个是你在 contributescommands 中定义的 command。用于实行特定操作。当点击这个右键菜单时,就会执行这个 command

  • when :这个限定了右键菜单项目出现的条件,editorLangId == markdown 表示仅对 Markdown 文件生效。更多其他的变量与表达式,可以参考文档

  • group :这个设置了右键菜单出现的位置,9_cutcopypaste@4 表示复制剪切粘贴的菜单组的第 4 的位置。其他 group 值可以参考文档(有时间再开帖子详解)。

    Menu Group Sorting

子菜单

添加子菜单与添加右键菜单有所关联,你需要先添加一个子菜单项目:

{
    "submenus": [
        {
            "id": "markdown-image.menulist",
            "label": "Markdown 粘贴"
        }
    ],
    "menus": {
        "markdown-image.menulist": [
            {
                "command": "markdown-image.paste",
                "group": "2_workspace"
            },
            {
                "command": "markdown-image.paste-rich-text",
                "group": "2_workspace"
            }
        ]
    }
}

这一部分添加的内容有点多,首先我们看 submenus。里面定义了一个子菜单项目,通过一个 idmarkdown-image.menulist 标识。接着在 menus 中定义这个子菜单包含的命令,这里的格式和添加右键菜单是类似的,一样包含 commandwhengroupwhen 不写也可以)。这样我们就定义好子菜单项目了,但是还无法显示,因为我们还没有把他们绑定到具体的右键菜单上。

因此,我们需要再添加一个右键菜单,但是属性有所不同:

{
    "menus": {
        "editor/context": [
            {
                "submenu": "markdown-image.menulist",
                "when": "editorLangId == markdown",
                "group": "9_cutcopypaste@4"
            }
        ]
    },
}

可以看到 command 改成了 submenu 。里面的值也不是来自于 commands 。而是一个 submenusid。这样就可以把刚才定义的子菜单绑定到右键菜单上了。

VSCode 之所以把子菜单的定义与右键菜单切割开来,是因为在 VSCode 上不仅仅在右键菜单可以有子菜单,在一些比如侧边栏也可以定义一些展开的菜单,那里也可以用同样方式在绑定子菜单。甚至同一个子菜单绑定到多个不同的位置使用。

本文首发于:https://my.hancel.org/2021/09/03/how-to-create-submenu-in-vscode-extension.html

上一篇
【带薪拉屎】你所在公司的厕所有手机信号 /WIFI 吗
如题 带薪拉屎结果信号只有一格,有时候直接就2G [图片]
下一篇
字体加载错误,我的代码有问题???
@font-face { font-family: ZpixReviewLocal; src: url(./zpixnew.ttf)format('truetype'); } 在使用一个字体文件时,浏览器加载出错。起初在我本机浏览器没问题,就没在意。但在其他主机上出现了字体现在不正常的问题,查明后发 ....
时间排序
吐个槽 周末准备干点啥?? AI 算法让图片动起来,深情演唱 Unravel 这一次我选择重开!! 字体加载错误,我的代码有问题??? VSCode 扩展开发之子菜单 【带薪拉屎】你所在公司的厕所有手机信号 /WIFI 吗 有一起玩下棋的吗,云顶或者金铲铲都可 New BugKu web5 大家好,我是大罗金仙 《未来世界的幸存者》------ 我还能幸存么?
上一篇
没有更多了
下一篇
周末在家就是要折腾
周末午餐 [图片] 下面菜谱: 无油鸡排 鸡排对半平切,刀背拍松,腌制胡椒粉。 面包糠加一点点橄榄油下锅炒到金黄。 鸡排先滚面粉,拍掉多余面粉,再裹鸡蛋液,再裹面包糠。 放入烤箱,200 度烤 30 分钟。15 分时翻面。用烤盘记得垫上油纸。 卤蛋 鸡蛋电饭锅隔水蒸 5 分钟。 取出立即浸泡凉水剥壳 ....
当前作者
TGIF-20210910 潮汕美食——粿汁 今日便当——肉末金针菇 不摸鱼了,干饭! 周末在家就是要折腾 VSCode 扩展开发之子菜单
上一篇
AI 算法让图片动起来,深情演唱 Unravel
项目地址:[链接] 实验环境:[链接] Step1: Clone Repo !git clone https://github.com/anandpawara/Real_Time_Image_Animation.git %cd Real_Time_Image_Animation Step2: Ins ....
下一篇
《未来世界的幸存者》------ 我还能幸存么?
[图片] 先扯点别的 阮老师《未来世界的幸存者》读书笔记 以后看书还是要一次性从头看到尾,有什么事搁置后,再捡起来看,完全忘记前面看的内容了,连自己做的笔记也是,囧rz…… 好了,接下来就是随便记录点啥 技术革命 上一次的工业革命,体力劳动被替代了,比如,水车替代了拉磨,汽车替代了马车。这一次的信息 ....
热门排序
ctf 常用编码总结 Markdown 使用指南 Visual Studio Code 摸鱼拓展 - 网易云 吐个槽 AI 算法让图片动起来,深情演唱 Unravel VSCode 扩展开发之子菜单 《未来世界的幸存者》------ 我还能幸存么? 萌新报道 重学 JavaScript[3] this 给大家推荐两本书 最近的天空和️☁️