SideBarEnhancements需显式添加文件夹到项目、禁用ignored_packages、菜单文件须放Packages/User/下且名确为Context.sublime-menu、UTF-8编码、.sublime-menu后缀;命令上下文须含node_type和selection_empty判断,模板注入需用v.run_command("insert")而非view.insert()。

SideBarEnhancements 是唯一能稳定补全 Sublime Text 侧边栏右键功能的插件,但装完不等于能用——90% 的“没反应”问题都出在项目绑定、路径权限或菜单配置位置错误上。
SideBarEnhancements 安装后右键菜单不出现
这不是插件失效,是 Sublime 没把它当“项目”。它只对显式加入项目的文件夹节点生效,不认拖进来的临时目录。
- 必须用
Project → Add Folder to Project…显式添加目标文件夹(不是File → Open Folder) - 检查
Preferences → Settings – User是否含"ignored_packages": ["SideBarEnhancements"],有就删掉 - 右键对象必须是侧边栏里的**文件夹节点**(哪怕只是项目根),在单个已打开的
index.html上右键无效 - Windows 用户避开
C:\Program Files\或受控路径;开发目录建议放在C:\Users\YourName\dev\
Packages/User/Context.sublime-menu 文件放错位置
侧边栏右键菜单只认 Packages/User/Context.sublime-menu 这一个路径,其他地方放了也静默失效。
- 打开
Preferences → Browse Packages…,进User文件夹,新建或编辑Context.sublime-menu - 文件名大小写敏感:必须是
Context.sublime-menu,不能是context.sublime-menu或Context.menu - 编码必须为 UTF-8(Windows 记事本另存为时选“UTF-8”,别用 ANSI)
- 后缀必须是
.sublime-menu,不是.txt(macOS/Linux 用户尤其注意隐藏扩展名)
菜单项写了但点了没反应
常见三类“找不到”:命令不存在、上下文不匹配、变量传错格式。
- 确认命令存在:在命令面板(
Ctrl+Shift+P)里搜open_in_terminal看是否能调出,否则说明插件没装或被禁用 - 上下文过滤要精准:
{"key": "node_type", "operand": "sidebar"}才限定侧边栏;加{"key": "selection_empty", "operator": "equal", "operand": false}确保点了某个节点 - 变量不能加引号:
"args": {"dir": "$file_path"}是对的;"args": {"dir": "$file_path"}(带引号)就传了字面字符串,不是真实路径 - 仅对文件夹生效要加:
{"key": "is_folder", "operator": "equal", "operand": true}
想让 New File 带模板内容
SideBarEnhancements 默认只建空白文件,不读配置、不支持变量。必须自己写 Python 插件 + 覆盖菜单命令。
- 在
Packages/User/下新建new_file_with_template.py,继承sublime_plugin.WindowCommand - 用
v.run_command("insert", {"characters": "#!/usr/bin/env python3\n\n"})插入内容,别用view.insert()(视图可能未就绪) - 按扩展名分流示例:
if ext == ".py": content = "#!/usr/bin/env python3\n\n" - 语法高亮要主动设:
v.set_syntax_file("Packages/Python/Python.sublime-syntax"),否则新建 .py 文件可能是纯文本模式 - 覆盖默认菜单:在
Packages/User/Side Bar.sublime-menu中重定义side_bar_new_file对应的command为你自己的new_file_with_template
真正容易被忽略的是:所有菜单逻辑依赖 node_type 和 selection_empty 这两个 context key 的组合判断,缺一不可;而模板注入必须等视图创建完成再操作,直接写死 view.insert() 在多数场景下会失败。


















