SideBarEnhancements 插件只解决了“有菜单”的问题,要想支持模板,还得自己动手写一个 `new_file_with_template.py` 命令,再配好 `Context.sublime-menu` 菜单文件。路径、编码、context 条件、命令执行顺序,哪一步出错都会失效。

装了插件也不显示「New File」,或者点了没反应——别急着怀疑配置写错了,大概率是文件放错目录、context 写错条件、命令没配对。
SideBarEnhancements 必须装,但只解决“有菜单”,不解决“带模板”
Sublime Text 原生侧边栏右键根本就没有 New File 这个选项,这不是设置问题,是功能压根没做。SideBarEnhancements 插件补上了这个空缺,但它默认调用的 side_bar_new_file 命令只会创建纯空白视图,不读任何配置,不支持变量注入,也不会插入内容。换句话说,它只负责“弹出一个新建文件的对话框”,至于文件里写什么,它不管。
- 修改
Settings – User里的"template"字段?完全没用——插件源码里根本没解析这一项,别白费力气。 - 直接改
Packages/SideBarEnhancements/下的 Python 文件?升级后会被覆盖,而且容易破坏插件依赖,不推荐。 - 真正能生效的路径只有
Packages/User/new_file_with_template.py,而且这个文件必须继承sublime_plugin.WindowCommand,命名和继承都不能错。
Packages/Context.sublime-menu 还是 Packages/User/Context.sublime-menu?
这是最容易踩的坑:侧边栏右键菜单只认 Packages/Context.sublime-menu(注意:没有 /User/ 这一级),而编辑区右键菜单才读 Packages/User/Context.sublime-menu。两个路径互不干扰,放错了就静默失效,连错误提示都没有。
- Windows 正确路径:
%APPDATA%\Sublime Text\Packages\Context.sublime-menu - macOS 正确路径:
~/Library/Application Support/Sublime Text/Packages/Context.sublime-menu - 文件名必须全小写、后缀为
.sublime-menu、编码为 UTF-8。如果存成了Context.sublime-menu.txt或者用了 ANSI 编码,菜单项直接消失,连个影都看不到。
context 过滤必须写准,否则菜单项不出现或乱弹
菜单项明明写了,右键却看不到——十有八九是 context 条件没满足。侧边栏节点没有 selector 属性,不能靠语法类型判断,只能靠 node_type 和 is_folder 这些硬字段来过滤。
- 限定只在侧边栏显示:
{"key": "node_type", "operand": "sidebar"} - 只对选中的文件夹生效(避免点单个文件时也弹出这个选项):
{"key": "is_folder", "operator": "equal", "operand": true} - 确保用户确实点中了某个节点(排除在空白处点击的情况):
{"key": "selection_empty", "operator": "equal", "operand": false} - 多个条件并列就是“且”关系,必须全部满足才会显示菜单项。
new_file_with_template.py 的关键细节
自定义命令的核心不在于代码量多少,而在于顺序和时机。视图刚创建的时候未必处于 ready 状态,直接调用 v.insert() 很容易插错位置甚至导致失败。
- 正确的做法:先调
self.window.new_file(),然后使用v.run_command("insert", {"characters": content})—— 别用v.insert(),后者是底层 API,容易出问题。 - 按扩展名分流的示例:
if ext == ".py": content = "#!/usr/bin/env python3\n\n",可以继续加.js、.md等分支。 - 语法高亮必须显式设置:
v.set_syntax_file("Packages/Python/Python.sublime-syntax"),否则新建的.py文件会一直被当做 Plain Text 处理。 $file_path这类变量在args中必须不加引号,写成"args": {"path": "$file_path"}才会被 Sublime 替换成实际路径。加了引号就变成普通字符串,永远不会被替换。
菜单项点了没反应,90% 的原因是这三类“找不到”:找不到命令(插件没装或禁用了)、找不到上下文($file_path 在空白处右键为空)、找不到路径(文件放错目录)。调试时加一条 {"caption": "DEBUG", "command": "echo", "args": {"message": "$scope"}} 看控制台输出,比反复猜测更靠谱。