结论:snippet 解析失败主因是触发词、scope、文件位置、XML 格式未对齐;应使用 Tools: New Snippet 命令生成骨架,触发词用纯字母数字(如 log),代码须包在 <content><![CDATA[...]]></content> 中。

直接说结论:触发词(tabTrigger)本身不难设,真正卡住 90% 人的,是它和 scope、文件位置、XML 格式这三者没对齐——缺一个,log + Tab 就是静默失败。
怎么创建 snippet 文件才不会解析失败
别手写 XML,Sublime 对格式很敏感,漏掉 或编码声明就会加载失败。最稳路径是用内置命令生成骨架:
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS)→ 输入Tools: New Snippet回车 - 模板里取消注释
<tabtrigger></tabtrigger>行,填入纯字母/数字,比如log(console.log不行,含点号会被当字面量) -
<content></content>里写实际代码,必须包在里,否则、<code>&会崩 - 保存时**必须**是
log.sublime-snippet(后缀错一个字符都不加载),路径必须为Packages/User/
scope 填什么?别猜,直接看当前文件的真实作用域
右下角显示 “JavaScript” 没用,Sublime 只认内部 scope 链。你在 .vue 的 <script> 里敲 log 没反应,大概率是因为 scope 写成了 source.js,而真实值是 source.vue meta.script.js。
- 打开目标文件(如
App.vue),把光标放在<script>块内 - 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name回车 - 状态栏会显示一串,如
source.vue meta.script.js source.js,取最左侧主干(source.vue)或完整链(source.vue meta.script.js)都行 - 多个语言就逗号分隔:
source.js, source.ts, source.jsx, source.vue,别写javascript或js——全无效
占位符怎么写才不乱跳光标
$1、$2、$0 不是装饰,是光标行为定义。写错会导致光标卡死、跳转错位、默认值不生效。
- 简单补全用
$1就够;需要默认文本才用${1:msg},但 Sublime 不支持嵌套,${1:${2:foo}}会原样输出 - 重复编号(如两个
$1)会让它们同步编辑,适合“改一次,两边都变”的场景 -
$0是最终出口,必须显式写上;漏掉的话,光标会停在最后一个$N,无法自然退出片段 - 想输出字面量
${date}?得写成\${date},否则 Sublime 会尝试解析变量并静默跳过
最容易被忽略的点:改完 snippet 后 Sublime 不自动重载。删旧文件、改名保存、或重启编辑器,三选一,否则你看到的永远是旧逻辑。

















