最常见原因是scope不匹配,sublime不报错只静默忽略;需用ctrl+shift+p→developer: show scope name查看真实scope(如source.js meta.script.setup.js),并严格匹配。

为什么tabTrigger按了没反应
最常见原因是scope不匹配——比如你写了<scope>source.js</scope>,但当前文件右下角显示的是Plain text或HTML。Sublime 不会报错,只当它不存在。
检查真实 scope 的方法:按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(Mac),输入 Developer: Show Scope Name 回车,状态栏会显示类似 source.js meta.function.js 的完整标识。JS 文件常用 source.js、source.jsx、source.ts;HTML 模板用 text.html.basic。
-
scope不能写成javascript或.js——这些不是合法值 - 删掉
<scope></scope>标签虽能全局生效,但容易和 Emmet 或其他 snippet 冲突 - 文件必须放在
Packages/User/目录下,路径错一格都不行(可通过Preferences → Browse Packages…直接打开)
insert_snippet 快捷键绑定怎么写才有效
Sublime 本身不支持直接给 snippet 绑定热键,必须通过 Key Bindings 调用 insert_snippet 命令,并传入 args.name 指向具体文件。
打开 Preferences → Key Bindings,在右侧用户配置中添加 JSON 条目:
[{"keys": ["ctrl+alt+l"], "command": "insert_snippet", "args": {"name": "Packages/User/log-js.sublime-snippet"}}]
注意几个硬性条件:
- 键位组合不能与系统输入法冲突(例如
ctrl+alt+l在 Windows 中常被中文输入法占用) -
args.name的路径必须是Packages/xxx/xxx.sublime-snippet格式,不能用相对路径或绝对路径 - JSON 语法必须严格正确:引号用英文双引号,末尾不能多逗号,数组外层用方括号
<content></content> 里缩进和换行怎么控制
<content></content> 中所有空格、Tab、换行都会原样插入到编辑器中——这不是 bug,是设计行为。
想让展开后代码顶格对齐,就别加缩进;想保持 2 空格缩进,就在 CDATA 内手动空两格;千万别用 Tab 键写缩进,因为 Tab 在 snippet 编辑时会被解释为光标跳转符($1、$2)。
示例(展开后第二行有 2 个空格缩进):
- 占位符用
$1、$2就够了,${1:default}可以但没必要,改完默认值后光标位置可能偏移 - 嵌套占位符如
${1:${2:text}}Sublime 不支持,会静默失效 -
<content></content>必须用包裹,否则{、等字符会导致 XML 解析失败且无提示
文件名、路径、编码这些细节最容易翻车
Windows/macOS/Linux 下路径都必须是 Packages/User/,但实际位置不同:
- Windows:
%APPDATA%\Sublime Text\Packages\User\ - macOS:
~/Library/Application Support/Sublime Text/Packages/User/ - Linux:
~/.config/sublime-text/Packages/User/
另外几个隐形雷区:
- 文件名不能含中文或空格(部分 Sublime Text 4 版本会跳过加载)
- 后缀必须是
.sublime-snippet,不是.txt或.xml - 保存文件时编码选
UTF-8,别用UTF-8 with BOM—— BOM 会导致解析失败
改完配置不用重启,保存即生效;但 snippet 文件放错位置或 scope 写错,它不会提醒你,只会彻底沉默——这是最需要警惕的地方。











