vscode编辑器内右键菜单须通过editor.contextmenu数组显式配置,空数组会清空全部项(含复制粘贴);command需用完整id(如editor.action.formatdocument),when必须含editortextfocus,group仅支持预设值(如9_cutcopypaste),插件项不响应menuvisibility:"hidden",需查插件专属开关或按alt临时折叠。

编辑器内右键菜单不是“开关式配置”,而是靠 editor.contextmenu 数组显式声明——想留什么、在什么条件下出现、排在哪,全得手动写清楚;空数组会清掉复制粘贴,别手滑。
怎么用 editor.contextmenu 只保留几个核心项
这个数组是唯一生效路径,改了就立刻影响光标落在代码行内时的右键菜单。它不继承默认项,也不支持“隐藏某几项”,只认你写的每一项。
-
command必须是完整命令 ID,比如editor.action.formatDocument,不是format或formatDocument;查法:按Ctrl+Shift+P输入“格式化文档”,看右侧显示的全名 -
when至少含editorTextFocus,否则菜单压根不弹;加&& !editorReadonly可避免在只读文件里显示格式化按钮 -
group决定排序位置,但只认预设值:"1_modification"、"9_cutcopypaste"、"z_commands";填错(如"mygroup")会导致项消失或乱序 - 示例(只留复制、粘贴、查找):
"editor.contextmenu": [<br> {"command":"editor.action.clipboardCopyAction","group":"9_cutcopypaste","when":"editorTextFocus && !editorReadonly"},<br> {"command":"editor.action.clipboardPasteAction","group":"9_cutcopypaste","when":"editorTextFocus && !editorReadonly"},<br> {"command":"editor.action.addSelectionToNextFindMatch","group":"z_commands","when":"editorTextFocus"}<br>]
插件注入的右键项为什么 menuVisibility: "hidden" 不管用
GitLens、ESLint、Prettier 这类插件注册的右键项,绝大多数不响应 menuVisibility 字段——这个字段只对部分 VSCode 官方内置命令有效,且必须写在插件自己的 package.json 里,用户 settings.json 里加了也无效。
- 更现实的做法是查插件文档,找专属开关,比如 GitLens 的
gitlens.views.repositories.menu设为false - 或者在插件设置页搜 “context menu”,关闭对应 toggle
- 临时方案:右键时按住
Alt(Windows/Linux)或Option(macOS),VSCode 会自动折叠扩展项,只留核心命令
为什么改了 editor.contextmenu 没生效
常见原因不是配置写错了,而是没满足触发条件,或命令 ID 根本不存在。
- 检查
when表达式是否满足当前上下文:比如写了editorLangId == 'typescript',但当前文件是.js - 确认命令 ID 在当前 VSCode 版本中存在——有些命令在 1.86+ 被重命名或移除,比如旧版的
editor.action.formatdocument(小写 d)已失效,必须用editor.action.formatDocument - JSON 语法错误(如末尾多逗号、引号不闭合)会导致整个
editor.contextmenu被忽略,建议用 VSCode 自带 JSON 验证(保存时提示) - VSCode 1.86+ 引入了
workbench.contextMenu.experimental.enabled,但它对扩展命令的when键支持有限,很多插件根本没暴露可用上下文键,写了也白写
真正麻烦的不是写配置,而是不同插件注册的命令没有统一的隐藏机制,也没有可靠的上下文键供 when 判断;你得一个一个查文档、关开关,或者干脆接受 Alt 折叠作为日常操作。











