合法.sublime-snippet文件必须通过Tools→Developer→New Snippet…创建,保存为UTF-8编码、.sublime-snippet后缀,需用CDATA包裹,仅限ASCII字符,须精确匹配如source.js,且必须切英文输入法才响应Tab。

sublime-snippet 文件必须放在 Packages/User/ 目录下才生效,否则无论内容多正确,按 Tab 都不会触发。
怎么创建一个合法的 .sublime-snippet 文件
别手动新建文本再改后缀——容易编码错、路径错、后缀错。直接用 Sublime 自带入口:Tools → Developer → New Snippet…,它会生成标准 XML 框架,含 、、 占位项。
实操要点:
-
里必须用包裹代码,否则、>会被当 XML 标签解析 -
只能是纯 ASCII 字符,不能含空格、点号或中文,比如log可以,console.log不行(会被当字面量) -
必须写对,常见如source.js、source.python;不写则只在Plain Text模式生效 - 保存时务必选 UTF-8 编码,文件名随意,但后缀必须是
.sublime-snippet(不是.snippet或.xml)
为什么输完 tabTrigger 按 Tab 没反应
90% 的问题出在 scope 不匹配或输入法状态不对。
常见错误现象:
- JS 文件里输
for+Tab没反应,但切到纯文本就能触发 →scope写成了text.plain或漏写了 - Vue 文件的
<script></script>块里片段不生效 → 实际 scope 是source.vue source.js(空格分隔),不是单写source.js - 明明刚保存了新文件,却插入旧内容 → 同名
tabTrigger存在多个文件,Sublime 静默采用「最后修改时间最新」的那个 - 中文输入法下死活不触发 → Sublime 完全忽略中文输入状态下的
Tab行为,必须切回英文输入法
查当前 scope 的最快方式:Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(Mac)→ 输入 Developer: Show Scope Name → 看状态栏显示的完整 scope 链。
怎么让光标自动跳转和填默认值
、 是跳转位, 是最终停留位;$1、$2 是跳转位,$0 是最终停留位;${1:default} 可设默认文本。${1:default} 可设默认文本。
实操注意点:
-
$1必须出现在的顶层文本流中,不能嵌套在 XML 标签内,否则无法跳转 - 函数定义常用写法:
function ${1:name}() { $2 },括号要写在${1:name}外面,避免被误解析 - 换行必须显式写
\n,直接回车会导致缩进混乱(XML 把换行当空白字符处理) - 想插文件名?用
$TM_FILENAME_BASE;想插日期?用$CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE
怎么排查和清理失效或冲突的 snippet
Sublime 不提示冲突,也不校验语法,出问题只能靠人工定位。
排查步骤:
- 用
Preferences → Browse Packages…打开真实目录,确认你操作的是Packages/User/,不是汉化包或其他子目录 - 在
Packages/User/下全局搜索,找出所有同 trigger 的文件xxx - 按修改时间排序,删掉过期或重复的,或临时重命名为
xxx_bak.sublime-snippet再测试 - 如果改完仍不生效,关掉所有 Sublime 窗口再重开——极少数情况下缓存未刷新
最易被忽略的点:scope 值是大小写敏感的,Source.Js 和 source.js 完全不同;且 Vue、TSX 等复合语法的作用域链必须完整匹配,少一个词就失效。











