讲师中心 微信公众号
AI工具推荐 视频效率加速

VSCode插件开发中多层嵌套菜单的设计原则与展示规范

落强同学_3158

落强同学_3158

发布时间:2026-08-20 09:32:41

|

444人浏览过

|

来源于php中文网

原创

VSCode插件不支持真正的多层嵌套菜单,menus配置仅允许一级子项;所谓“二级菜单”是通过group分组、命名约定及QuickPick模拟的视觉效果,并非真实父子结构。

vscode插件开发中多层嵌套菜单的设计原则与展示规范

VSCode 插件开发中不支持“多层嵌套菜单”——package.json 的 menus 配置只允许一级子项,所谓“二级菜单”是假象,实际是快捷方式或命令面板入口的视觉模拟。

为什么 menu contribution 无法定义二级下拉菜单

VSCode 的贡献点(contribution point)设计明确限制了菜单层级:menu 字段只接受字符串数组(如 ["editor/context"]),而其 submenu 属性在官方 schema 中并不存在。你看到的“嵌套菜单”,比如右键里出现“Format → Prettier → Format with Prettier”,其实是三个独立条目,靠命名和分组逻辑模拟层级,而非真实父子结构。

  • 所有菜单项最终都注册到同一级 context menu 或 command palette 中
  • VSCode 不解析 title 里的斜杠("Format/Prettier")为嵌套,只是原样显示文本
  • 尝试在 menus 中写 "submenu": "prettier" 会导致插件激活失败或被忽略

如何用 group 和 order 模拟“嵌套感”

真正可控的是排序与分组。VSCode 允许通过 group 字符串控制显示顺序和视觉分隔,格式为 category@order,其中 @ 后的数字决定先后(越小越靠前)。

  • "group": "navigation" → 放在顶部区域
  • "group": "1_modification" → 放在编辑区修改类操作附近
  • "group": "prettier/0_format" → 在右键中创建名为 “prettier” 的分组,0_format 表示该组内第一个项
  • 多个同 group 值的项会连续排列,并自动加分割线(除非显式设 "when" 条件干扰)

例如,想让“Prettier: Format”和“Prettier: Ignore”看起来属于同一功能块,就都设 "group": "prettier/1" 和 "group": "prettier/2",VSCode 会把它们收拢在一起。

command palette 中的“伪嵌套”命名陷阱

用户常在 commands 里写 "title": "Prettier: Format",以为冒号能触发分组,但 VSCode 并不解析它。真正起作用的是 command ID 和 when 上下文条件:

VSCode
VSCode

避免常见的 VSCode 错误——设置冲突、调试器配置和扩展冲突。

下载
  • "command": "prettier.format" 和 "command": "prettier.ignore" 是两个完全独立的命令 ID
  • 若希望只在 .ts 文件中显示某条命令,必须配 "when": "resourceLangId == 'typescript'"
  • 命令面板搜索时,输入 “prettier format” 能命中,是因为全文匹配标题,不是因为结构嵌套

别依赖标题里的符号做逻辑分组——那只是给用户看的提示,后端无感知。

替代方案:用 QuickPick + 多级选项模拟嵌套交互

如果真需要多级选择(比如先选项目、再选环境、最后执行部署),不能靠菜单,得用 vscode.window.showQuickPick() 手动构建流程:

  • 第一级 QuickPick 列出所有项目名,用户选中后触发第二级
  • 第二级基于第一级结果动态加载环境列表
  • 每级都可带 description 和 detail,比菜单更灵活
  • 注意避免阻塞主线程:异步加载选项,加 loading 状态提示

这种模式虽然代码量稍增,但体验更可控,也符合 VSCode 对“轻量交互”的设计哲学——菜单只负责快捷触发,复杂流程交给专用 UI。

最易被忽略的一点:VSCode 从不缓存菜单结构。每次右键展开,都会重新评估 when 条件、重新读取 package.json 中的 menus 配置。这意味着动态菜单(比如根据当前 workspace 是否含 prettier.config.js 决定是否显示某项)必须靠 when 表达式实现,而不是在插件激活时“注册一次”。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
vscode是什么_vscode怎么安装配置
vscode是什么_vscode怎么安装配置

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

1255

2023.06.30

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2612

2023.07.21

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

1889

2024.03.14

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

1707

2024.03.14

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2587

2024.03.15

vscode中文设置方法
vscode中文设置方法

方法一:在设置页面中,搜索“locale”,并选择“zh-cn”。方法二:按“Ctrl Shift P”快捷键,输入“Configure Display Language”,将语言修改为“zh-cn”。如果上述方法无效,可考虑安装中文插件。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

1798

2024.03.15

vscode用途介绍
vscode用途介绍

Visual Studio Code(VSCode)是一款由 Microsoft 开发的多功能文本编辑器,适用于各种编程语言。作为一款开源软件,VSCode 拥有代码高亮、自动补全、调试、Git 集成等强大功能,成为程序员不可或缺的工具。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

1242

2024.03.15

vscode和visualstudio的区别
vscode和visualstudio的区别

Visual Studio是一款功能强大的集成开发环境(IDE),适用于专业开发人员进行复杂项目的构建。而VSCode则是一款轻量级的代码编辑器,更适合各种规模的项目开发。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

1116

2024.03.15

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn