Snippet 文件必须放在 Packages/User/ 目录下才生效,Windows 路径为 %APPDATA%\Sublime Text\Packages\User\,macOS 为 ~/Library/Application Support/Sublime Text/Packages/User/,Linux 为 ~/.config/sublime-text/Packages/User/。

Snippet 文件该放在哪个目录下才生效
Sublime 的 Snippet 必须放在正确路径才能被识别,否则 html5 触发词敲了没反应。Windows 和 macOS 路径不同,但核心原则一致:必须放在 Packages/User/ 目录里。
- Windows:
%APPDATA%\Sublime Text\Packages\User\ - macOS:
~/Library/Application Support/Sublime Text/Packages/User/ - Linux:
~/.config/sublime-text/Packages/User/
别手抖放错成 Packages/HTML/ 或 Packages/Emmet/ —— 那些是插件自带目录,User 目录才是你自定义 Snippet 的唯一合法落脚点。
如何让 snippet 在 .html 文件中自动触发
关键在 <scope></scope> 声明。如果只写 source.html,它在纯文本或 Markdown 里也可能弹出来;但若写成 text.html.basic,又可能被 Emmet 或其他插件覆盖导致失效。
- 推荐 scope:
text.html—— 覆盖所有 HTML 类型(.html、.htm、.shtml),且兼容 Emmet - 避免用
source.html:这是旧版作用域,Sublime Text 4 已倾向忽略 - 别漏掉
<tabtrigger>html5</tabtrigger>—— 这是你输入后按 Tab 触发的关键词,大小写敏感
一个最小可用示例:
立即学习“前端免费学习笔记(深入)”;
<![CDATA[<snippet><content><![CDATA[<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>$1</title></head><body> $0 </body></html>]]></content><tabTrigger>html5</tabTrigger><scope>text.html</scope><description>HTML5 skeleton</description></snippet>]]>
为什么输入 html5 + Tab 后光标没跳到 title 位置
这通常不是 Snippet 写错了,而是 Sublime 没加载新文件,或者 $1 / $0 占位符被当成普通文本输出了。
- 保存文件后,务必重启 Sublime 或执行
Preferences → Browse Packages → User,确认文件名是html5.sublime-snippet(不能带空格或中文) -
$1表示第一个跳转位置(title 内容),$0是最终光标停留处(body 内)——两者缺一不可,否则 Tab 键会直接插入字面量$1 - 如果用了 Emmet,它可能劫持
html5触发词。临时禁用 Emmet 测试:右键菜单 →Emmet: Toggle Expanding Abbreviation
生成骨架时想自动插入当前日期或文件名怎么办
Sublime 原生 Snippet 不支持动态变量(比如 ${date}),但可以用 $TM_FILENAME_BASE 这类 TextMate 兼容变量实现部分自动化。
-
$TM_FILENAME_BASE→ 当前文件名(不含扩展名),适合填入<title> -
$CURRENT_YEAR→ 当前年份,可用于版权行 -
$1和$2仍可组合使用,比如:<title>$1 - $TM_FILENAME_BASE</title> - 别指望
$DATE或$TIME—— Sublime 不支持,强行写进去只会原样输出
真正需要动态内容(如完整时间戳、随机 ID),得换用插件如 PlainTasks 或写 Python 插件,Snippet 本身能力就到这儿了。
注意 $TM_FILENAME_BASE 在新建未保存文件时为空字符串,这是正常行为,不是 bug。



















