Sublime Text 3(Build 3143+)和 ST4 默认内置 Emmet,无需手动安装;HTML 缩写必须按 Tab 展开,非 Enter;自定义缩写需在 Settings – User 中正确配置 JSON;Vue/JSX 中需设置 emmet_syntax_scopes 才生效。

Emmet在Sublime Text里根本不用手动安装
Sublime Text 3(Build 3143 及以后)和 Sublime Text 4 默认已内置 Emmet,无需再通过 Package Control 安装 Emmet 插件——装了反而可能冲突。如果你按教程搜到“Install Package → Emmet”,大概率会装上一个过时甚至不兼容的旧版,导致 Tab 展开失效、缩写不响应或报错 KeyError: 'html'。
确认是否启用:打开 Preferences → Settings – Syntax Specific,确保当前是 HTML 文件时,"syntax": "Packages/HTML/HTML.tmLanguage" 存在且未被覆盖;同时检查 Preferences → Package Settings → Emmet → Settings 是空文件(即走默认配置),不是自定义了一堆废弃字段如 variables 或 snippets。
HTML 缩写展开必须用 Tab,不能回车
这是最常卡住人的点:输入 ul>li*3 后按 Enter,得到的是纯文本换行;只有按 Tab 才触发 Emmet 解析并生成嵌套结构。Sublime 默认把 Enter 绑定为换行,而 Emmet 的展开热键严格绑定在 Tab 上(不可改,改了会和其他补全冲突)。
常见缩写示例:
立即学习“前端免费学习笔记(深入)”;
div#header+div.content+div#footer
→ 按 Tab 后生成三个并列 <div>,分别带 id 和 class;
table>tr*2>td*3
→ 生成 2 行 × 3 列表格;
注意:!(生成 HTML5 模板)只在空白行或 <html> 标签外生效;若光标已在某个标签内(比如 <body> 中),输 ! 再按 Tab 什么都不会发生。
自定义缩写要改 JSON 文件,不是改设置界面
想让 myheader 展开成 <header class="site-header"></header>?别在 GUI 设置里瞎填。正确路径是:Preferences → Package Settings → Emmet → Settings – User,然后写:
{
"snippets": {
"html": {
"abbreviations": {
"myheader": "<header class=\"site-header\"></header>"
}
}
}
}
关键点:
-
"html"是语法作用域名,不是文件后缀,写成"htm"或"html5"都无效 - 双引号必须转义(
\"),否则 JSON 解析失败,Emmet 静默禁用自定义片段 - 修改后不用重启,但缩写只对新输入生效——已输完的
myheader不会自动重解析,得删掉重打再按Tab
Vue / JSX 文件里 Emmet 默认不工作
在 .vue 单文件组件的 <template> 区域,或 .jsx 文件中,Emmet 缩写默认不响应。原因:这些文件的 syntax scope 不是 text.html.basic,Emmet 只监听 HTML 语法上下文。
解决方法分两步:
- 确保文件已正确识别为 HTML:右下角状态栏显示
HTML(不是Vue Component或JavaScript (JSX));点它 → 选HTML或Vue Component (HTML)(需额外插件支持) - 在
Settings – Syntax Specific里加一行:"emmet_syntax_scopes": ["text.html.vue", "source.js.jsx"](scope 名需准确,可用Ctrl+Shift+P → Developer: Show Scope Name查看当前光标处真实 scope)
Scope 错一位,缩写就完全静音,而且不会报错提示。


















