基础.sublime-snippet文件需以XML格式置于Packages/User目录,含(支持$1、$2、$0占位符)、(触发词)、(作用域,如source.js)和可选。

怎么写一个基础的 .sublime-snippet 文件
Sublime Text 的代码片段本质是 XML 文件,必须以 .sublime-snippet 为后缀,放在 Packages/User 目录下才能被识别。文件结构固定,缺一不可:
-
里写要插入的代码,支持$1、$2占位符(按 Tab 跳转),$0是最终光标位置 -
定义触发关键词,比如输入log再按 Tab 就展开 -
控制生效范围,例如source.js表示只在 JavaScript 文件中激活 -
是可选说明,在命令面板或自动补全里显示
log source.js console.log() with cursor inside
如何让 snippet 支持多语言或动态内容
一个 snippet 默认只能绑定一种 ,但你可以用逗号分隔多个作用域,比如 source.js, source.ts, source.jsx;如果想在 HTML 中插入带 class 的 div, 应设为 text.html.basic。
动态内容靠 $TM_FILENAME_BASE 这类环境变量实现——Sublime 内置了约 20 个,常见有:
-
$TM_FILENAME:当前文件名(含扩展名) -
$TM_FILEPATH:完整路径 -
$CURRENT_YEAR:当前年份 -
$SELECTION:已选中文本(适合包裹型 snippet,如加$SELECTION)
注意:变量名大小写敏感,且不能嵌套使用(比如 ${TM_FILENAME%.*} 这类 Shell 风格截断不支持)。
为什么写了 snippet 却不生效?常见排查点
最常卡在三个地方:
- 文件没放对位置:必须是
Packages/User/xxx.sublime-snippet,不是随便建个文件夹扔进去;可通过菜单Preferences → Browse Packages…确认路径 -
和已有插件冲突:比如 Emmet 已占了div,你的 snippet 就不会触发;换更具体的触发词,如divc或加前缀my-div -
匹配失败:打开一个目标文件,按Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入View Package File,再搜Scope Name,就能看到当前文件的实际 scope 字符串
有没有更快的创建方式?推荐用插件
手动写 XML 容易拼错标签,尤其带缩进和 CDATA 时。装个 SnippetMaker 插件能省事不少:
- 选中一段代码 → 右键 →
Make Snippet - 自动弹出表单,填
Tab Trigger、Scope、Description - 生成后直接保存,不用管 XML 结构
插件本身不维护了,但 Sublime 4 仍可用;如果担心兼容性,用官方方法:菜单 Tools → Developer → New Snippet…,它会新建一个带注释模板的文件,删掉说明、填好内容再保存即可。
真正容易被忽略的是 scope 的粒度——比如写了个 React 函数组件 snippet,用 source.js 会误触在纯 JS 文件里,而 source.js.jsx 才更准;不同语法高亮包定义的 scope 名可能不同,得实测确认。










