Sublime Text中保存带注释代码块须手动创建.sublime-snippet文件,将注释与代码一同写入XML的区域;动态日期需用$CURRENT_YEAR等内置变量,scope须精确匹配语法作用域,文件须存于Packages/User/且tabTrigger仅含字母数字下划线。

保存带注释的代码块,本质是保存代码片段(.sublime-snippet)
Sublime Text 不支持直接“选中带注释的代码 → 一键存为模板”,所谓“带注释的代码块”必须手动封装成 .sublime-snippet 文件才能复用。它不是截图、不是收藏、也不是自动提取注释——你得把注释和代码一起写进 XML 模板里。
常见错误现象:选中一段含 // 或 /* */ 的代码,按 Ctrl+S 保存,结果只是存了当前文件;或者误以为“保存为 snippet”菜单能智能识别注释结构,其实没有这功能。
- 必须通过
Tools → Developer → New Snippet...手动生成 XML 模板 -
区域内粘贴你想要的完整代码块,包括所有注释行 - 注释内容不会被特殊处理,
# 初始化配置和/** @param {string} name */都原样保留 - 如果注释里有占位符需求(如作者名、日期),要用
$1、${2:default}等语法,不能靠插件自动替换
如何让注释在插入时动态更新(比如自动填入当前日期)
原生 .sublime-snippet 不支持运行时执行 Python 或读取系统时间,所有“动态”效果必须靠外部机制补足。想让 // Created: {date} 变成真实日期,只有两种可靠路径:
- 用自定义 Python 插件监听
on_pre_save事件,在保存前正则匹配并替换模板占位符(需额外开发,适合团队统一规范) - 在 snippet 的
中写死$CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE——这是 Sublime 内置变量,仅支持有限几个($CURRENT_YEAR、$CURRENT_MONTH、$CURRENT_DATE、$CURRENT_HOUR、$CURRENT_MINUTE),不支持格式化或自定义函数 - 别用
{date}、{{now}}这类写法,它们不会被解析,只会原样插入 - 如果依赖
$CURRENT_*变量,注意它只在插入 snippet 时计算一次,后续编辑不会刷新
scope 设置不当会导致注释代码块无法触发
很多人把带注释的 Vue 组件模板存成 snippet,却在 .vue 文件里输触发词没反应——问题几乎都出在 值上。Sublime 判断文件类型靠的是 syntax scope,不是后缀名。
- 打开目标文件(如
App.vue),按Ctrl+Alt+Shift+P(Windows/Linux)或Cmd+Alt+Shift+P(macOS),状态栏会显示类似source.vue meta.tag.structure.template.vue的完整 scope 链 - 把最具体、最稳定的那一段(通常是
source.vue或text.html.vue)填进source.vue - 不要写
source.js去匹配.vue里的 script 区域——除非你单独为 script block 创建 snippet 并设 scope 为source.js.embedded.vue - 多个 scope 用英文逗号分隔:
,但逗号前后不能有空格source.python,source.shell
保存后不生效?检查这三处硬性限制
代码片段创建完,输入 tabTrigger 却无响应,90% 是以下三个地方之一卡住了:
- 文件必须保存在
Packages/User/目录下,且扩展名严格为.sublime-snippet(少一个字母或大小写错都不行) -
内容不能含空格、斜杠、点号等符号,只能是字母、数字、下划线;例如会失效,得改成http-get http_get或httpget - 当前光标所在行的 syntax scope 必须匹配
值,且不能处于字符串、注释、正则字面量等 context 中——比如你在 JS 字符串里打log,即使有也不会触发source.js
真正容易被忽略的是 scope 的上下文穿透性:Sublime 的 snippet 触发依赖于当前光标“所处的语法层”,而不是整个文件类型。一个 .py 文件里嵌了 SQL 字符串,此时 scope 是 source.sql.embedded.python,不是 source.python。











