sublime text 的 snippet 必须放在 packages/user 目录下才生效,且 xml 中 tabtrigger 和 content 字段不可省略;scope 需匹配当前语法作用域,跳转位编号必须连续,否则无法正常触发或编辑。

Snippet 文件必须放在 Packages/User 目录下才生效
Sublime Text 只会自动加载 Packages/User 下的 .sublime-snippet 文件,其他位置(比如桌面、项目根目录、甚至 Packages/MyPlugin)放了也不会被识别。Windows/macOS/Linux 的 Packages 路径不同,但「始终用菜单打开」最稳妥:Preferences → Browse Packages…,然后进 User 文件夹新建文件。
常见错误现象:保存后按 Tab 没反应、片段列表里搜不到名字,八成是放错位置了。别手抖存到 Sublime 安装目录或同步文件夹里——那些路径不在加载链路中。
XML 格式不能省略 tabTrigger 和 content
一个最小可用 Snippet 必须包含这两个字段,否则 Sublime 会静默忽略该文件。注意不是所有字段都可选:description 和 scope 可以没有,但少了 tabTrigger 就没法触发,少了 content 就没内容可插。
示例(保存为 log-js.sublime-snippet):
<snippet> <content><![CDATA[console.log($1); $0]]></content> <tabTrigger>log</tabTrigger> <scope>source.js</scope> </snippet>
要点:
-
$1是第一个跳转位,$0是最终光标停留点 -
scope控制适用范围,source.js表示只在 JS 文件生效;不加则全局可用 - 内容必须包在
里,否则换行、等符号会解析失败
作用域 scope 写错会导致片段“隐身”
Scope 不是文件后缀,而是 Sublime 内部的语法作用域标识符。比如 .vue 文件里写 JS,当前 scope 可能是 source.js.embedded.html,而非单纯的 source.js。直接写错就完全不触发。
这是易秀购主题网分享的一款展示为图片类的类的wordpress主题,WP主题熟悉的朋友应该一眼能看出这是瀑布流修改优化而来。主题并且采用了Ajax加载技术,主题代码非常精简,加载速度非常快。这款图片类主题格式化了几个自定义栏目,分别是price(价格)、from(购买自…)、ob-url(单品url)、shop-url(店铺url)和banner(文章详细页面上部的图片,如果
查当前 scope 的方法:Ctrl+Shift+P(Win)或 Cmd+Shift+P(Mac)→ 输入 “Show Scope Name”,光标所在位置的作用域会显示在状态栏。复制粘贴进 snippet 的 scope 字段即可。
常用 scope 值参考:
- JS:
source.js(普通 .js)、source.js.jsx(React)、source.js.embedded.html(HTML 中的 script) - HTML:
text.html.basic - CSS:
source.css、source.scss - Vue:
text.html.vue(整个文件)、source.js.vue(script 区域)
变量和跳转位用错顺序会让编辑流程卡住
Sublime Snippet 的跳转逻辑是线性的:$1 → $2 → … → $0。如果写了 $2 却漏了 $1,Tab 键会跳过第一个空位,或者直接停在 $0,导致中间参数无法填写。
典型翻车场景:
- 复制别人 snippet 时删掉某段但忘了改编号,留下
$1和$3,中间断档 - 想让光标最后回到开头,却误写
$0在第一行,结果一触发就跳走,根本输不了内容 - 在
content里用了未定义变量如$TM_FILENAME,它不会报错,但也不渲染,变成字面量
调试建议:先写最简版本(只有 $1 和 $0),确认能跑通再加字段。复杂片段务必从上到下连续编号。
作用域判断和跳转位编号这两处,改一次错要重启 Sublime 才能看到效果,很多人卡在这儿反复试却不明白为什么。









