sublime text代码片段应通过修改现成模板快速掌握:用命令面板新建snippet骨架,保存为log.sublime-snippet至packages/user/,在js中输入log+tab触发;确保scope设为source.js等匹配值,利用$1、${1:default}控制跳转与默认文本,并在vue/jsx中显式列出多scope如source.js,source.vue。

Sublime Text 的代码片段不是靠“教程”学会的,而是靠改一个现成的、立刻用上、再微调来掌握的。
怎么快速创建并触发一个 snippet
别从头写 .sublime-snippet 文件——直接用命令面板生成骨架更稳。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Tools: New Snippet回车 - 它会打开一个预设 XML 模板,填
<content></content>里的内容,比如console.log($1); - 改
<tabtrigger>log</tabtrigger>——保存时文件名必须是log.sublime-snippet,否则不生效 - 保存到
Packages/User/目录下(用Preferences → Browse Packages…打开路径) - 在 JS 文件里输
log+Tab就能展开
常见错误:保存成 log.snippet 或 log.xml;或者放在 Packages/Default/ 这类只读目录下,重启也没用。
为什么 tabTrigger 不生效
触发失败通常不是 snippet 写错了,而是作用域(scope)没对上。
- 默认模板里
<scope>source.python</scope>只在 Python 文件生效;想在 JS 里用,得改成source.js或更宽泛的source - 不确定当前文件 scope?按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,光标处会显示完整 scope,比如source.js meta.block.js - 多个 scope 用逗号分隔:
<scope>source.js, source.ts</scope> - scope 写太宽(如
text.plain)可能导致冲突,优先用语言专属 scope
性能影响小,但 scope 错了等于没写。
$1、$2 和 ${1:default} 的实际区别
它们控制光标跳转顺序和默认值,不是装饰用的。
-
$1是第一个跳转位,$2是第二个……按Tab顺序切换 -
${1:console}表示第 1 个位置默认填console,可编辑;删掉就变空 - 如果写了
${1:foo}${2:bar},展开后光标先停在foo上,按一次Tab跳到bar;但如果foo被删了,Tab仍会跳到bar位置 - 别用
$0做“结束位”来收尾——它只是最终停留点,不参与跳转序列
容易踩的坑:以为 ${1:abc}${2:def} 能自动补全两个词,其实只是提供默认文本,删掉就没了。
如何让 snippet 在 Vue 或 JSX 中也工作
Vue 单文件组件和 JSX 不是纯 source.js,scope 更复杂。
- Vue 模板区是
text.html.vue,脚本区是source.vue(部分插件还细分出source.js.embedded.vue) - JSX 常见 scope 是
source.js.jsx或source.tsx,取决于你装的语法包 - 稳妥做法:在
<scope></scope>里列全可能的 scope,用英文逗号隔开,比如:<scope>source.js, source.jsx, source.tsx, source.vue</scope> - 不要依赖“自动识别”——Sublime 不像 VS Code 那样动态推断嵌入语言,scope 必须显式匹配
最常被忽略的是:改完 snippet 后没重启 Sublime,或改了 scope 却忘了重新保存文件。文件一保存,新规则立刻生效,不需要重启,但必须保存成功。











