侧边栏右键菜单由packages/context.sublime-menu控制,而非packages/user/context.sublime-menu;编辑区右键菜单才读取后者,两者路径独立、互不干扰,且侧边栏菜单需用context字段(如"selection":"folder")精准限定生效条件。

侧边栏右键菜单只能通过 Packages/Context.sublime-menu 文件控制,不是 Packages/User/Context.sublime-menu —— 放错位置就完全不生效。
为什么侧边栏右键菜单和编辑区右键菜单是两个文件
Sublime Text 把不同区域的右键行为分开了:Packages/User/Context.sublime-menu 只影响编辑区(文本选中时)、标签页、空编辑区;而侧边栏(Sidebar)右键菜单由 Packages/Context.sublime-menu 控制(注意:路径里没有 User/)。这个文件默认不存在,需手动创建。
- 编辑区右键菜单:读取
Packages/User/Context.sublime-menu - 侧边栏右键菜单:读取
Packages/Context.sublime-menu(顶层 Packages 目录下) - 两者互不干扰,也不能共用一个文件
怎么创建并验证 Packages/Context.sublime-menu
必须进到 Sublime 的 Packages 根目录(不是 User 子目录),新建 Context.sublime-menu。路径示例:
- Windows:
%APPDATA%\Sublime Text\Packages\Context.sublime-menu - macOS:
~/Library/Application Support/Sublime Text/Packages/Context.sublime-menu - Linux:
~/.config/sublime-text/Packages/Context.sublime-menu
保存后无需重启,但要确认文件编码为 UTF-8、JSON 语法合法(可用 sublime.log_commands(True) 开控制台看是否加载)。如果右键没反应,控制台无任何日志输出,基本就是路径或文件名错了——比如写成 context.sublime-menu(小写)或 Context.sublime-menu.txt(带后缀)。
侧边栏菜单项必须加 context 才能精准触发
侧边栏右键菜单默认只对“选中项目”生效,但很多命令(如 open_in_terminal)需要明确知道操作对象是文件还是文件夹。不加 context 过滤,菜单项可能灰掉或点击无响应。
- 对选中文件生效:
{"key": "selection", "operator": "equal", "operand": "file"} - 对选中文件夹生效:
{"key": "selection", "operator": "equal", "operand": "folder"} - 仅当侧边栏可见时显示:
{"key": "setting.sidebar_visible", "operator": "equal", "operand": true} - 多个条件用数组组合,顺序无关,全部满足才显示
例如,让“在终端中打开”只出现在文件夹右键中:
[{
"caption": "Open in Terminal",
"command": "open_in_terminal",
"args": {"path": "$file_path"},
"context": [
{"key": "selection", "operator": "equal", "operand": "folder"}
]
}]
command 名写错、插件未启用、变量不支持都会静默失败
侧边栏菜单项点击后没反应,90% 是以下三类问题之一:
-
command值拼错:比如"open_in_termianl"(少个 i)、"OpenInTerminal"(大小写/下划线错),必须和命令面板里搜出来的 ID 完全一致 - 依赖插件但未安装或禁用:如
side_bar_duplicate来自 SideBarEnhancements 插件,插件没启用则该菜单项不会渲染 - 用了不被侧边栏支持的变量:
$file在文件夹右键时为空,应改用$file_path或$folder;$project_path在未打开项目时也为空
最稳的验证方式:右键前先按 Ctrl+Shift+P,搜你要用的命令名,确认它存在且可执行——否则菜单项只是摆设。
侧边栏菜单配置是 Sublime 中最易被误放路径的一类,Packages/ 和 Packages/User/ 看似只差一层,实际加载逻辑完全不同。改完记得关掉所有 Sublime 实例再重开一次,避免缓存干扰判断。











