context.sublime-menu文件必须放在packages/user/目录下,sublime仅识别此路径;放错位置(如packages/default/或插件目录)将静默失效,不报错也不显示。

Context.sublime-menu 文件必须放在 Packages/User/ 目录下
Sublime 的右键菜单只认 Packages/User/Context.sublime-menu 这一个路径——放错位置,比如 Packages/Default/ 或插件目录里,菜单项就静默失效,不报错也不显示。
打开 Preferences > Browse Packages…,进 User 文件夹,新建或编辑文件:Context.sublime-menu。注意后缀必须是 .sublime-menu(不是 .txt),编码选 UTF-8。
- Windows 路径示例:
%APPDATA%Sublime TextPackagesUserContext.sublime-menu - macOS 路径示例:
~/Library/Application Support/Sublime Text/Packages/User/Context.sublime-menu - Linux 路径示例:
~/.config/sublime-text/Packages/User/Context.sublime-menu
command 名必须与插件注册名完全一致
写 "command": "copy_path" 却没装 CopyFilePath 插件?或者拼成 copy_filepath?菜单项直接不出现。命令名区分大小写,且必须已注册到命令面板中。
验证方式:按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入关键词搜一下。如果搜不到 copy_path,说明插件没装、被禁用,或命令名记错了。
- 常见有效命令:
sort_lines(内置)、open_in_terminal(Terminal 插件)、reveal_in_finder(内置) -
"args"里用的变量如$file_path是运行时替换的,不能加引号写成"$file_path",否则传的是字面字符串 - 加分割线用:
{"caption": "-"},不能省略caption字段
用 context 控制菜单只在侧边栏或文件上出现
默认所有菜单项在编辑区、侧边栏、标签页右键都会显示。想让它只出现在侧边栏(比如“在终端中打开当前目录”),就得靠 context 数组过滤。
node_type 是最可靠的判断依据:侧边栏点击时为 "sidebar",编辑区为 "text",标签页为 "tab"。多个条件并列即“且”关系。
- 仅侧边栏显示:
"context": [{"key": "node_type", "operand": "sidebar"}] - 仅在 Python 文件编辑区显示:
"context": [{"key": "selector", "operator": "equal", "operand": "source.python"}] - 同时满足侧边栏 + 有文件被选中:
"context": [{"key": "node_type", "operand": "sidebar"}, {"key": "selection_empty", "operator": "equal", "operand": false}]
系统级右键(资源管理器)和 Sublime 内部右键是两套机制
你在 Windows 资源管理器里右键看到的“Open with Sublime Text”,和你在 Sublime 侧边栏里右键看到的菜单,完全无关。前者靠注册表控制,后者只由 Context.sublime-menu 驱动。
注册表关键点:
- 文件右键:改
HKEY_CLASSES_ROOT*shell,参数用%1 - 文件夹空白处右键:改
HKEY_CLASSES_ROOTDirectoryBackgroundshell,参数用%V - 可执行路径必须双引号包裹,反斜杠要双写:
"C:\Program Files\Sublime Text\sublime_text.exe" -n "%V" - 缺
-n参数会导致新窗口不聚焦,旧窗口被复用
真正容易被忽略的,是 context 条件和变量作用域的耦合:比如用 $file_path 却没限定 node_type 为 sidebar,在编辑区右键时这个变量就是空的,命令可能跳过执行但不提示——得自己查日志或观察行为才能定位。











