sublime 的 snippets 按当前语法动态加载,查可用触发词只需 ctrl+shift+p 输入 insert snippet;html、for、div 等内置触发词需匹配语法且区分大小写;失效主因是语法错配、空格干扰、emmet 冲突或作用域不匹配;自定义片段更可控,注意 scope、路径、后缀名三处准确。

Sublime 内置的 Snippets 不靠“记忆清单”驱动,而是按当前文件语法类型动态加载——你输什么能触发,取决于右下角显示的语法名(比如 HTML、JavaScript),不是全局固定列表。
怎么快速查当前文件支持哪些内置触发词
别翻文档、别猜前缀。直接按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 Insert Snippet 回车。弹出菜单里列出的每一项,格式都是 HTML: div 或 Python: for,冒号前是语法名,冒号后就是该语言下可用的 tabTrigger。
- 这个列表只显示「当前文件语法匹配 + 已启用」的片段,比查 Wiki 更准
- 如果某个常用词(如
if)没出现,先检查右下角是不是Plain text或错配语法 - 菜单项点击即插入,不用手动输再按 Tab,适合不确定触发词时兜底
常见语言里最实用的几个内置触发词
这些不是冷门技巧,而是高频、结构清晰、开箱即用的默认片段:
-
html:在HTML语法下输入后按 Tab,生成完整 HTML5 骨架,光标停在<title></title>内;注意必须是HTML语法,Plain text下无效 -
for:在Python文件中输入后按 Tab,展开为for item in iterable:,光标先停在iterable,Tab 后跳到item;但在JavaScript文件里它会展开成传统三段式for (var i = 0; i ,不能混用 -
div、ul、a:HTML 语法下直接输入对应标签名 + Tab,生成带闭合的结构,比如div→<div></div>,光标在开始标签和结束标签之间 -
log:部分版本 JS 语法下支持,但不稳定;更可靠的是自定义clg触发console.log('$1');$0,避免依赖内置
为什么你输对了词却没反应
绝大多数“不生效”问题跟代码逻辑无关,而是环境错配:
-
tabTrigger区分大小写:Log和log是两个触发词,内置片段通常全小写 - 输入位置有干扰:前面有空格、在标签中间(如
<div>fo|</div>里输for)、或光标不在行首空位,都会导致 Tab 不触发 - 第三方插件劫持 Tab:比如 Emmet 默认开启
tab_key_promotion,会优先响应 HTML 标签缩写(如div→<div></div>),覆盖 Snippet。可去Preferences → Package Settings → Emmet → Settings关掉它 - 作用域嵌套场景失效:Vue 单文件组件的
<script></script>块,真实 scope 是source.js.embedded.html,不是source.js,所以纯 JS 的for片段不会出现
自定义片段比依赖内置更可控
内置片段数量有限,且无法修改。比如你想让 html 片段默认输出 lang="zh-CN",或者加一个 fetch 模板,只能自己建:
- 用
Tools → Developer → New Snippet…生成模板,填好<content></content>、<tabtrigger>fech</tabtrigger>、<scope>source.js</scope> - 保存为
fetch.sublime-snippet到Packages/User/目录(路径通过Preferences → Browse Packages…打开) -
tabTrigger避免用点号或下划线,比如fetch-api会被忽略,改用fech或fapi - 多行内容务必把
和 <code>]]>顶格写,否则插入后带多余换行和缩进,破坏代码格式
真正卡住人的从来不是怎么写 XML,而是 scope 写错、路径放错、后缀名少字母——这三个地方错一个,整个文件就等于不存在。











