手动保存.sublime-snippet文件必须放在Packages/User/目录下,后缀严格为.sublime-snippet;编码用UTF-8无BOM;根节点必须为<snippet>且XML合法;作用域需匹配当前文件语法,否则静默失效。

手动保存 .sublime-snippet 文件到正确路径
文件必须放在 Packages/User/ 目录下,且后缀严格为 .sublime-snippet。Windows 用户尤其要注意:记事本默认隐藏扩展名,容易误存为 log.sublime-snippet.txt——Sublime 完全无视这种文件。
确认路径的方法:菜单栏 Preferences → Browse Packages…,打开的文件夹里找 User 子目录。别拖进 Packages/Default 或桌面,也别新建子文件夹(如 User/Snippets/),就直接丢进 User 根目录。
- 用 VS Code、Notepad++ 或 Sublime 自身新建并保存,编码选
UTF-8(含中文或符号时,记事本默认 ANSI 会解析失败) - 文件名可任意,但建议带语义,比如
vue-script-block.sublime-snippet - 保存后不必重启 Sublime,但需手动刷新:
Ctrl+Shift+P→ 输入Reload Syntax Definitions回车
XML 结构必须合法且根节点为 <snippet>
Sublime 只认标准 XML 格式,且根元素必须是 <snippet>。常见错误是复制粘贴时漏掉闭合标签、多出空格、或把 <content> 写成 <contents> ——全部导致静默失效,不报错也不提示。
<content> 内容必须用 包裹,否则 <、& 等字符会被 XML 解析器截断或报错。例如写 if (x < 0) { 不加 CDATA 就会崩。
- 不要在
<content>外写注释(<!-- -->),部分版本会干扰解析 -
<tabTrigger>和<scope>是可选标签,但一旦写了就必须拼写正确、闭合完整 - 整个文件不能有 BOM 头(UTF-8 with BOM 会导致加载失败,VS Code 默认可能带 BOM,保存时选 “UTF-8” 而非 “UTF-8 with BOM”)
作用域(scope)不匹配 = 触发词完全没反应
输完 log 按 Tab 没动静?90% 是 <scope> 值和当前文件语法不一致。Sublime 不会警告,只是跳过该 snippet。
查当前作用域:按 Ctrl+Shift+P → 输入 Show Scope Name 回车,状态栏显示类似 source.vue source.js 的字符串——取最前面那段(如 source.vue)填进 <scope>。若右下角显示 Plain text,却写了 <scope>source.js</scope>,那它永远不生效。
- Vue 单文件组件的
<script>区域常用 scope:source.vue source.js(空格分隔,表示“同时满足”) - 想全局触发?删掉整行
<scope>xxx</scope>,但小心和 Emmet 或其他 snippet 冲突 - HTML 模板内用
text.html.basic,不是text.html或source.html
CDATA 内换行与缩进处理不当会破坏代码格式
<content> 插入内容原样还原,包括你敲的换行和空格。如果写成:
<content><![CDATA[ console.log($1); ]]></content>
实际插入时开头会多一个空行,且缩进被保留——在函数体内触发,可能让 console.log 缩进错位。
正确做法:所有内容顶格写, 和 <code>]]> 都靠左,换行符用 \n 显式控制,缩进用空格或 \t 手动对齐。
- 避免在 CDATA 内用 Tab 键缩进(Tab 在 snippet 编辑中是跳转符,会被解释为
$1) - 多行结构(如
if块)每行开头不要留空格,靠(两个空格)或\t控制逻辑缩进 - 手动删掉
前和 <code>]]>后的空行,否则插入后多出空白段落
真正卡住人的地方不在写法多复杂,而在路径、编码、scope 这三处细节——任一出错都静默失败,连日志都不给。调试时优先验证这三项,比反复改 <content> 有效得多。


















