sublime text侧边栏右键默认无“新建文件”选项,需安装sidebarenhancements插件并配合自定义python插件(如new_file_with_template.py)实现带模板的右键新建功能,再通过user/side bar.sublime-menu重映射菜单命令。

Sublime Text 侧边栏右键菜单不显示“新建文件”选项
默认安装的 Sublime Text 不提供侧边栏右键“新建文件”功能,这是原生缺失项,不是配置错了。官方只支持通过 Ctrl+N 新建空标签页,再手动保存为文件——没法直接在目标文件夹里建新文件。
要实现右键新建,必须借助插件,且不能只装一个:需要组合使用 SideBarEnhancements(提供右键菜单) + 手动配置模板逻辑(它本身不支持模板)。
-
SideBarEnhancements安装后,右键会多出 New File、New Folder 等选项,但点开只是新建空白文件,不带内容 - 它不读取
sublime-settings或项目配置里的“模板”,也没有内置变量(如${date}、${filename})支持 - 如果你双击新建的空文件再粘贴模板,效率反而更低,和不用插件没区别
用 PluginBuilder + Python 脚本注入自定义模板
真正可控的方式是写一个极简插件,监听右键点击“New File”,创建文件时自动写入预设内容。这比改菜单 JSON 或 hack 插件源码更稳定、可维护。
步骤如下:
- 在 Sublime 的
Packages/User/目录下新建文件,命名为new_file_with_template.py - 内容只需 20 行左右,核心是重载
side_bar_new_file命令,调用window.run_command("new_file")后立即插入模板文本 - 模板内容可硬编码,也可按扩展名分流:
if ext == ".py": content = "#!/usr/bin/env python3\n\n" - 注意:不要用
view.run_command("insert", {"characters": content})直接插,得等视图就绪,否则可能插到错误位置;推荐用view.replace(...)配合view.sel().clear()清空初始光标选区
import sublime
import sublime_plugin
<p>class NewFileWithTemplateCommand(sublime_plugin.WindowCommand):
def run(self, paths=None):
v = self.window.new_file()
v.set_syntax_file("Packages/Python/Python.sublime-syntax")
v.run_command("insert", {"characters": "#!/usr/bin/env python3\n\n"})</p>让右键菜单真正调用你的模板命令
仅写好插件还不够,SideBarEnhancements 默认绑定的是它自己的 side_bar_new_file,你得覆盖它的菜单项指向。
编辑 Packages/SideBarEnhancements/side_bar.py 是高危操作(升级插件会被覆盖),正确做法是:在 Packages/User/Side Bar.sublime-menu 中重定义右键菜单。
- 这个文件不存在就新建,Sublime 会优先加载
User/下同名菜单文件 - 找到原菜单中
"caption": "New File"的那一项,把"command": "side_bar_new_file"改成"command": "new_file_with_template" - 确保命令名和你 Python 文件里 class 名的驼峰转下划线一致(
NewFileWithTemplateCommand→new_file_with_template) - 改完保存,无需重启,右键菜单立刻生效;如果没反应,打开 Sublime 控制台(
Ctrl+`),看是否有ImportError或命令未注册提示
模板内容动态化与路径上下文获取
纯静态模板很快就不够用——比如想让新建的 index.html 自动填入当前项目名,或根据父文件夹名生成类名。这时得从 paths 参数里挖信息。
paths 是右键点击时传入的路径列表(单击是长度为 1 的数组),你可以用 os.path.basename(paths[0]) 拿到文件夹名,或用 sublime.active_window().folders() 查当前工作区根目录。
- 别直接拼接字符串生成文件名,用
os.path.join(paths[0], "newfile.py")更安全,避免 Windows 路径斜杠问题 - 如果右键点的是文件而非文件夹,
paths[0]是文件路径,需先os.path.dirname(paths[0])提取父目录 - 模板里写
<!-- Project: ${project_name} -->这种占位符没用,Sublime 不解析;必须在 Python 里用.format()或 f-string 实时替换 - 中文路径在 Windows 上容易出
UnicodeEncodeError,建议统一用v.insert(edit, 0, content)替代replace,更兼容
复杂点在于:右键动作触发快,但窗口、视图、路径上下文未必都就绪。最稳的做法是把实际写入逻辑包进 set_timeout 延迟一帧,避开初始化竞争。这事容易被忽略,结果就是模板有时出现、有时空白。










