vscode编辑器区域右键菜单必须通过settings.json中显式配置editor.contextmenu数组实现,空数组会清空全部项(含复制粘贴),需手动列出command(如editor.action.clipboardcopyaction)、group(如"9_cutcopypaste")和when(必须含editortextfocus)三字段;插件菜单项无法用menuvisibility隐藏,须查插件专属开关或禁用插件,修改后需完全重启vscode才生效。

VSCode编辑器区域的右键菜单不能靠图形界面拖拽修改,必须手动编辑 settings.json 中的 editor.contextmenu 数组——它不是开关,而是白名单:不写的命令就不会出现,包括复制、粘贴这些基础功能。
怎么只保留几个核心菜单项
空数组 "editor.contextmenu": [] 会清空全部默认项(连复制粘贴都消失),所以得显式列出你要留下的命令。每个条目必须包含 command、group 和 when 三个字段,缺一不可。
-
command必须是完整 ID,比如复制是editor.action.clipboardCopyAction,不是copy或clipboardCopy;查法:按Ctrl+Shift+P输入“复制”,看右侧显示的全名 -
when必须含editorTextFocus,否则右键根本不会弹出菜单;加&& !editorReadonly可避免在只读文件里显示格式化等无效操作 -
group决定排序位置,但只认预设值,如"1_modification"、"9_cutcopypaste"、"z_commands";填错(比如"mygroup")会导致菜单项不显示或乱序
示例(仅保留复制、粘贴、查找):
"editor.contextmenu": [
{"command":"editor.action.clipboardCopyAction","group":"9_cutcopypaste","when":"editorTextFocus && !editorReadonly"},
{"command":"editor.action.clipboardPasteAction","group":"9_cutcopypaste","when":"editorTextFocus && !editorReadonly"},
{"command":"editor.action.addSelectionToNextFindMatch","group":"z_commands","when":"editorTextFocus"}
]
GitLens/ESLint/Prettier 的右键项怎么隐藏
主流插件从 VSCode 1.84 起支持 menuVisibility: "hidden",但这个配置**只能写在插件自己的 package.json 里**,你往用户 settings.json 里加是无效的。实际能用的方案只有两个:
- 查插件文档找专属开关,比如 GitLens 的
gitlens.views.repositories.menu设为false,或 ESLint 插件设置页搜 “context menu” 关闭对应 toggle - 临时规避:右键时按住
Alt(Windows/Linux)或Option(macOS),VSCode 会自动折叠扩展项,只留内置命令 - 小众或老版本插件不响应任何隐藏逻辑,只能禁用整个插件,或接受它的菜单项存在
为什么改了 settings.json 没生效
常见失效原因不是配置错,而是环境没刷新:
- 改完
settings.json后必须**完全重启 VSCode**(关掉所有窗口再重开),仅“重载窗口”(Ctrl+Shift+P→Developer: Reload Window)不生效,缓存会残留旧菜单 -
commandID 写错一个字符(比如formatDocument少个action.)、when缺editorTextFocus、group值非法,都会导致整条项静默丢弃,不会报错也不会提示 - 某些插件命令(尤其是 AI 相关或新版本扩展)根本不暴露可用的上下文键,你写了
when: "resourceLangId == 'typescript'"也无效,因为该命令压根没注册这个上下文
别把编辑器右键和系统右键搞混
你在资源管理器里右键一个 .js 文件看到的“用 VS Code 打开”,和你在编辑器里右键代码弹出的菜单,是两套完全独立的系统:
- 前者由 Windows 注册表控制,路径如
HKEY_CLASSES_ROOT\*\shell\VSCode,改完要重启资源管理器(任务管理器 → 重启“Windows 资源管理器”) - 后者只受
editor.contextmenu控制,注册表动再多次也没用 - 两者配置互不影响,但名字可能重复(比如都叫“格式化”),容易误判生效范围
最常被忽略的是:你花半小时调好了 editor.contextmenu,结果想测试的却是资源管理器右键——那当然没反应。











