Sublime Text 默认不自动闭合空标签,自闭合行为取决于插件及设置;Emmet 仅对白名单内标签(如img、br)在启用auto_close_self_closing_tag后补/>, AutoCloseTag则支持输入时实时闭合但需正确配置且不兼容中文输入法。

Sublime Text 默认不自动闭合空标签(如 <img>、<br>),也不会给它们加 />;所谓“自闭合”行为,完全取决于你用的是哪个插件、启用了哪项开关,且不同插件对“哪些标签算自闭合”的定义还不一样。
Emmet 的 auto_close_tag 不管自闭合标签
Emmet 插件的 auto_close_tag 设置只影响成对标签(比如 <div>、<p>)。它默认不会给 <img src="a.jpg"> 补 />,哪怕你把它当 XML 写——这是有意为之的设计。
- 如果你在 HTML 文件中输入
<img后按Tab,Emmet 会展开为<img src="">(不带/>),符合 HTML5 规范 - 想让它输出
<img src="" />?得手动开启auto_close_self_closing_tag,但这个选项只在 Emmet 的设置里有效,不是 Sublime 原生配置项 - 该选项生效后,也只作用于 Emmet 内置白名单里的标签:area、base、br、col、embed、hr、img、input、link、meta、param、source、track、wbr
- 不在白名单里的标签(比如自定义元素
<my-tag>)永远不会被自动补/>
AutoCloseTag 插件才真正管“输入即闭合”
原生 Sublime 和 Emmet 都不支持“敲完 <img 按 > 就出 <img />”这种行为。只有 AutoCloseTag(作者 wingyplus)能做到,但它靠的是语法识别 + 白名单匹配,不是智能推断。
- 安装后必须打开
Preferences → Package Settings → AutoCloseTag → Settings - 确认
"html_self_closing_tag": true已启用,否则它会傻乎乎地给<img>补</img>(错误!) - 它的白名单和 Emmet 基本一致,但不可扩展——你不能往里面加新标签名
- 如果当前文件语法不是
HTML或HTML (Vue)(右下角显示 Plain Text 就失效),它压根不响应 - 输入法处于中文状态时按
>,可能触发不了闭合——因为实际输入的是中文全角字符
别混用 Emmet 和 AutoCloseTag 的闭合逻辑
两者同时启用,容易出现重复补全或光标错位。典型表现是:输 <div → 按 > 补成 <div></div> → 再按 Tab 又变成
<div></div></div></p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p> <ul> <li>推荐方案一:关掉 <code>AutoCloseTag,只用 Emmet 的
Tab 补全(输入缩写如 img 而非 <img>)
auto_close_tag,只留 AutoCloseTag 处理实时输入,避免 Tab 冲突"auto_close_tags": false(这是旧版 Sublime 的原生配置,已废弃,但会干扰 Emmet)expand_abbreviation_on_tab 设为 true 是前提,否则 Tab 根本不干活XML/JSX 场景下要额外设语法特定配置
在 JSX 或 XML 文件中,<img /> 是合法写法,但 Sublime 默认不会自动补斜杠。这时候不能只改全局设置,得进对应语法的设置文件。
- 打开
Preferences → Settings – Syntax Specific(注意不是通用 Settings) - 确保右下角显示的是
JavaScript (React)或XML,再粘贴:"auto_close_tag": true和"auto_close_self_closing_tag": true - XML 模式下,Emmet 会更倾向输出
/>,但依然依赖白名单;不在名单里的标签(如<custom>)仍不会闭合 - 如果用的是 Vue 单文件组件,
<template>区域走 HTML 规则,<script>区域走 JS 规则——闭合行为随语法切换而变
最易被忽略的一点:所有这些闭合行为都**不回溯生效**。你已经写好的 <img src="x">,哪怕后来开了 auto_close_self_closing_tag,它也不会自动变成 <img src="x" />。补全只发生在你正在输入的那一刻。


















