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 触发的关键词,大小写敏感
一个最小可用示例:
<content><meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>$1</title> $0 ]]></content><tabtrigger>html5</tabtrigger><scope>text.html</scope><description>HTML5 skeleton</description>]]>
为什么输入 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></title> -
$CURRENT_YEAR→ 当前年份,可用于版权行 -
$1和$2仍可组合使用,比如:<title>$1 - $TM_FILENAME_BASE</title> - 别指望
$DATE或$TIME—— Sublime 不支持,强行写进去只会原样输出
真正需要动态内容(如完整时间戳、随机 ID),得换用插件如 PlainTasks 或写 Python 插件,Snippet 本身能力就到这儿了。
注意 $TM_FILENAME_BASE 在新建未保存文件时为空字符串,这是正常行为,不是 bug。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











