vscode编辑器右键菜单唯一配置路径是editor.contextmenu数组,需手动声明全部条目(含复制粘贴),command用完整id、when必须含editortextfocus,group仅支持预设值;插件菜单项无法通过menuvisibility隐藏,须查插件专属开关或禁用其菜单贡献。

编辑器右键菜单只能靠 editor.contextmenu 数组显式配置
VSCode 编辑器区域(即光标落在代码行内时)的右键菜单,不支持图形界面拖拽增删,editor.contextmenu 是唯一生效路径。它不是开关,而是白名单:空数组会清空全部项(包括复制粘贴),想留什么就得手动写进去。
-
command必须用完整命令 ID,比如editor.action.formatDocument,不是format或formatDocument;查法:Ctrl+Shift+P 输入“格式化”,看右侧显示的全名 -
when条件里必须含editorTextFocus,否则菜单压根不弹;加&& !editorReadonly可避免在只读文件里显示格式化按钮 -
group决定排序位置,但只认预设值,如"1_modification"、"9_cutcopypaste";填"mygroup"会导致项消失或乱序
插件右键项不能靠 menuVisibility 隐藏
GitLens、ESLint、Prettier 等插件注入的右键项,绝大多数不响应 menuVisibility: "hidden" —— 这个字段只对部分 VSCode 官方内置命令有效,且必须写在插件自己的 package.json 中,无法通过用户 settings.json 生效。
- 更现实的做法是查插件文档,找专属开关,比如 GitLens 的
gitlens.views.repositories.menu设为false - 或者直接禁用插件的菜单贡献:在插件设置页搜 “context menu”,关闭对应 toggle
- 临时方案:右键时按住
Alt(Windows/Linux)或Option(macOS),VSCode 会自动折叠扩展项,只留核心命令
系统级右键菜单(资源管理器/桌面)得改注册表
你在资源管理器里右键一个 .js 文件、或在桌面空白处右键看到的菜单,和编辑器内右键完全无关。这部分由 Windows 注册表控制,VSCode 设置文件对其无效。
- 路径通常是
HKEY_CLASSES_ROOT\*\shell或HKEY_CLASSES_ROOT\Directory\shell下的子项 - 删掉对应扩展注册的键(如 Prettier、ESLint 的条目),然后重启
explorer.exe(任务管理器 → 重启) - 别乱删不明键值,尤其带
vscode字样的不一定全是 VSCode 相关,有些是其他工具注册的
容易被忽略的兼容性细节
VSCode 1.86+ 引入了 workbench.contextMenu.experimental.enabled,但它的 when 表达式支持有限,且不同版本对扩展命令上下文键的识别不一致。很多插件命令根本没暴露可用的 when 键,导致你写了条件也无效。
- 最稳的底线:编辑器右键菜单只依赖
editor.contextmenu,别的路基本绕不开配置或注册表 - 别信“隐藏某插件右键项只需加一行 settings”这种说法——除非该插件明确文档支持
menuVisibility,否则大概率是假的 - 每次升级 VSCode 后,建议重新验证
editor.contextmenu数组是否仍生效,个别版本会重置或变更命令 ID











