Emmet在多光标下不展开缩写是设计限制,仅响应活动光标;需确保所有光标处于同一HTML语言模式,且不在属性值等非支持上下文中,推荐用复制粘贴或正则替换替代。

多光标下输入 div 按 Tab 不展开?根本不是 Emmet 的问题
VSCode 多光标模式(Ctrl+Click 或 Ctrl+D)下,div + Tab 无反应,不是 Emmet 被禁用,而是 Emmet 默认**不支持多光标触发缩写展开**。它只响应当前活动光标(即最后一个光标)的输入行为,其余光标被忽略。这是设计使然,不是 bug。
验证方式:单光标时输入 div + Tab 能正常生成 <div></div>,但选中三处 div 后按 Tab,只有最后一处补全——这就确认是机制限制。
-
emmet.triggerExpansionOnTab必须为true,否则单光标也不行 - 多光标时,所有光标必须处于**同一语言模式**(右下角显示
HTML),若混有Plain Text或JavaScript,Emmet 直接跳过整组 - 不能在属性值内多光标操作,比如同时选中多个
class="|"中的竖线位置,Emmet 不识别这种上下文
想批量生成 HTML 结构?换思路,别硬扛多光标 + Tab
强行让多光标支持 Emmet 展开没有官方路径,也容易引发光标错位、嵌套混乱。更可靠的做法是用「重复编辑」或「剪贴板广播」替代:
- 先用单光标写好一个完整结构,如
div>p{Hello}+ul>li*3+ Tab → 得到带列表的块 - 复制该结构(
Ctrl+C),再用多光标定位到目标位置,直接Ctrl+V—— 所有光标位置都会粘贴相同内容 - 若需差异化内容(如
item-1、item-2),用Ctrl+Shift+P→ 输入Insert Number(需装插件Numbered Bookmarks或Increment Selection) - 对齐类名等文本替换场景,优先用
Ctrl+H替换 + 正则(如class="(.+)"→class="item-$1"),比多光标补全更可控
html.autoClosingTag 在多光标下是否生效?
这个设置控制的是「输入开始标签后自动补闭合标签」,和 Emmet 展开无关。但它在多光标下**部分生效**:当你在多个位置同时输入 <div> 并敲 <code>>,VSCode 会为每个光标插入对应的



















