sublime text代码模板即.sublime-snippet文件,需同时满足三条件才生效:正确扩展名、存于packages/user/目录、scope与当前文件语法完全匹配;支持${1:default}实现多光标跳转与默认值。

Sublime Text 本身没有“代码模板”这个独立功能,所有所谓模板,实际都是 .sublime-snippet 文件——它本质是带触发逻辑的 XML 片段,不是文件级模板,也不是项目初始化器。
为什么新建的 snippet 不生效?
最常见原因不是写错了内容,而是三个硬性条件没同时满足:
-
.sublime-snippet后缀名必须完整、准确,不能是.snippet、.xml或隐藏了.txt(Windows 默认隐藏扩展名,极易误存为log.sublime-snippet.txt) - 文件必须放在
Packages/User/目录下——通过Preferences → Browse Packages…打开的就是正确路径,别手抖存到桌面或下载文件夹 -
<scope></scope>值必须和当前文件语法完全匹配;比如在.vue的<script></script>块里写 JS,作用域是source.js.embedded.html,不是source.js
验证当前作用域:按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 show_scope_name 回车,状态栏会显示类似 source.js meta.function.js 的字符串,取最前面那段即可。
如何让 snippet 支持多光标跳转和默认值?
靠 ${1:default}、${2:placeholder} 这类语法实现,不是直接写 $1。
-
${1:console}表示第一个跳转位,展开后光标停在console上,可直接编辑;按Tab跳到下一个${2:xxx} -
$0必须且只能出现一次,代表最终光标位置(比如函数末尾分号后) - 避免重复用
$1多次——它们会同步变化;真要复用同一值,写成${1:xxx}+${1} - 多行内容务必用
包裹,否则换行符、、<code>&会被 XML 解析器吃掉或报错
怎么模拟“新建文件即套模板”?
Sublime 原生不支持文件级模板,但可用 snippet + 手动切换语法来逼近效果:
- 新建空文件 → 按
Ctrl+Shift+P输入Set Syntax: HTML回车(确保右下角显示HTML) - 输入你设的
<tabtrigger></tabtrigger>(比如html5),再按Tab - 如果没反应,检查 snippet 是否保存在
Packages/User/html5.sublime-snippet,且<scope></scope>是text.html.basic(HTML 文件的标准作用域) - 改完 snippet 后不用重启 Sublime,执行
Ctrl+Shift+P → Reload Syntaxes即可刷新识别
注意:如果你在 Plain Text 模式下输入 html5 再按 Tab,它永远不触发——作用域不匹配时 Sublime 完全静默,不会提示也不会报错。











