sublime代码片段需同时满足三个条件才能生效:.sublime-snippet后缀、存于packages/user/目录、与当前文件语法精确匹配;新建推荐用tools: new snippet命令生成标准模板,再修改、和三处。

Sublime 的代码片段不会自动生效,必须同时满足 .sublime-snippet 后缀、Packages/User/ 路径、<scope></scope> 精确匹配三者,缺一不可。
怎么新建一个能立刻触发的 snippet
别手写 XML,直接用内置模板最可靠:按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 Tools: New Snippet 回车。它会生成标准结构,你只需改三处:
-
<content></content>里填真实代码,所有内容必须包在CDATA内,否则{、$会被 XML 解析器吞掉 -
<tabtrigger></tabtrigger>只用字母/数字/下划线,比如log可以,console.log或http-get会失败 -
<scope></scope>必须和当前文件语法完全一致,JS 文件填source.js,Vue 的<script></script>块得填source.vue meta.script.js
为什么输完 tabTrigger 按 Tab 没反应
Sublime 不报错,只是静默跳过——90% 是 <scope></scope> 不匹配或路径/后缀出错:
- 当前文件右下角显示的是
Plain Text或Vue Component,但 snippet 的<scope></scope>是source.js→ 它们不等价 - 不确定 scope?按
Ctrl+Shift+P输入Developer: Show Scope Name回车,状态栏显示类似source.js meta.function.js的字符串,取最前面那段(如source.js)填进<scope></scope> - 多个 snippet 设了相同
<tabtrigger></tabtrigger>(比如都叫log),Sublime 会静默采用「最后修改的那个」,删掉重复项或重命名排查 - 文件没放对位置:必须是
Packages/User/log.sublime-snippet,不是Packages/Default/或随便建的文件夹;Windows 易误存为log.sublime-snippet.txt(隐藏扩展名)
多行结构、光标跳转和默认值怎么写才不崩
换行缩进和变量嵌套极易出错,关键细节很实在:
- 多行内容必须手动清理
CDATA后的首行换行和]]>前的末行换行,否则生成代码前会多几格空格;例如要写成一行,不能换行缩进 -
$1、$2表示跳转顺序,$0是最终光标出口,必须且只能出现一次;写成$1 $1会导致同步编辑 -
${1:default}和$1行为不同:前者展开后光标停在default上可直接编辑,后者只是占位符,无默认值 - 变量不能嵌套在双引号字符串里(如
"$1"),否则变成字面量输出
如何让 snippet 支持多语言或动态内容
一个 snippet 默认只能绑定一种 <scope></scope>,但你可以用逗号分隔多个作用域:
- 例如
<scope>source.js, source.ts, source.jsx</scope> - HTML 中插入带 class 的 div,
<scope>text.html.basic</scope> - 动态内容靠
$TM_FILENAME_BASE这类环境变量实现,常见有:$TM_FILENAME(当前文件名含扩展名)、$CURRENT_YEAR(当前年份)、$SELECTION(已选中文本) - 变量名大小写敏感,且不能嵌套使用(比如
${TM_FILENAME%.*}这类 Shell 风格截断不支持)
scope 匹配是最容易被忽略的环节——它不是“大致对就行”,而是要求和 Developer: Show Scope Name 返回的最前段字符完全一致;哪怕只差一个点或一个空格,snippet 就不会触发。











