Sublime右键菜单自定义必须将Context.sublime-menu文件置于Packages/User/目录下才生效;路径错误、JSON语法错误或command名不匹配均会导致菜单不显示或无响应。

Sublime 的右键菜单能自定义,但必须放在 Packages/User/Context.sublime-menu 路径下才生效;放错位置、JSON 格式错误、command 名写错,都会导致菜单不显示或点击无反应。
Context.sublime-menu 文件必须放在 User 目录下
Sublime 只认 Packages/User/Context.sublime-menu 这个路径。其他位置——比如 Default 包里、Packages 根目录、或者随便建个文件夹放进去——全都不加载。
打开 Sublime → Preferences > Browse Packages…,进到弹出的 User 文件夹,直接新建文件,命名为 Context.sublime-menu(注意后缀是 .sublime-menu,不是 .txt)。
- Windows 路径示例:
%APPDATA%\Sublime Text\Packages\User\Context.sublime-menu - macOS 示例:
~/Library/Application Support/Sublime Text/Packages/User/Context.sublime-menu - Linux 示例:
~/.config/sublime-text/Packages/User/Context.sublime-menu - 保存后无需重启,右键立刻刷新;没变化就说明文件根本没被读取
command 名必须和实际命令 ID 严格一致
你写的 "command": "copy_path" 这种值,不是随便起的,得跟 Sublime 内置命令或插件注册的 ID 完全匹配。大小写、下划线、有无空格都不能错。
查命令 ID 最可靠的方法:按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入关键词搜索,看面板里显示的是什么名字。比如搜 “upper”,会看到 upper_case;搜 “sort”,会看到 sort_lines。
-
"command": "json_format"对应插件JsonFormatCommand类(去掉 Command 后缀) - 拼成
"jsonFormat"或"json-format"都会失效 - 如果命令来自插件,确保插件已安装且启用;否则右键点下去没反应,控制台也看不到日志
用 context 控制菜单项只在合适位置出现
不加 context 字段,菜单项会全局显示(文本区、侧边栏、标签页都出现)。但很多命令只该在特定场景下出现,比如“复制路径”只应在有文件打开时显示,“在终端中打开”只应在侧边栏选中文件夹时可用。
靠 context 数组里的 key/operand 组合来过滤。常见判断条件:
-
{"key": "selection_empty", "operator": "equal", "operand": false}→ 仅当有文字被选中时显示 -
{"key": "setting.sidebar_visible", "operator": "equal", "operand": true}→ 仅当侧边栏可见时显示 -
{"key": "node_type", "operator": "equal", "operand": "file"}→ 仅在侧边栏选中文件时显示(不是文件夹) -
{"key": "selector", "operator": "equal", "operand": "source.python"}→ 仅在 Python 文件的编辑区右键时显示(注意大小写敏感:source.python≠source.Python)
系统级右键菜单(资源管理器里)和 Sublime 无关
你在 Windows 资源管理器里看到的“用 Sublime 打开”,是注册表控制的,不是 Context.sublime-menu 管的。删这个文件对系统右键菜单完全没影响。
要删掉它,必须手动删注册表项:
- 以管理员身份运行
regedit - 定位到
HKEY_CLASSES_ROOT\*\shell\Sublime Text(文件右键)或HKEY_CLASSES_ROOT\DirectoryBackground\shell\Sublime Text(文件夹空白处右键) - 右键删除整个
Sublime Text项(不是只删下面的command子项) - 重启
explorer.exe(任务管理器 → 找到进程 → 重启) - 如果删完还不消失,大概率是杀毒软件拦截了注册表写入,或你没用管理员权限运行 regedit
真正容易被忽略的是:context 条件里所有字符串值(比如 operand)都是大小写敏感的,且 JSON 必须严格合法——少一个逗号、多一个引号,整个文件就废了,Sublime 不报错,只是静默忽略。











