能,但需满足三个前提:所有光标位于HTML语法上下文、缩写字符串完全合法、Tab或Ctrl+E未被劫持;Emmet对每个光标独立匹配展开,不智能识别多光标意图。

Emmet 缩写在多光标下能同时展开吗?
能,但必须满足三个前提:所有光标都落在 HTML 语法上下文中、每个光标前的缩写字符串完全合法、Tab 或 Ctrl+E 没被劫持。Emmet 不会“智能识别”多光标意图——它只对每个光标位置做一次独立的字符串匹配和展开。
常见错误现象:div.item 写三行后按 Ctrl+D 选中全部再按 Tab,结果只有第一行展开,其余光标位置静默失效。原因通常是其中某一行缩写有空格、引号不闭合或右下角语法不是 HTML。
- 确保所有光标都在
<body>内(脚本块里默认不生效) - 用
Ctrl+E替代Tab测试,排除快捷键冲突 - 缩写必须严格一致:比如
li*3不能有的写li*3、有的漏掉*
怎么批量包裹多行文本?
Ctrl+Shift+G(Windows/Linux)或 Cmd+Shift+G(macOS)是唯一可靠入口。它不依赖光标是否在缩写上,而是把当前所有选中行当作内容,统一套进你输入的结构里。
使用场景:整理 API 返回的字段列表、生成一整组 <li>、给多段文案加 <span class="highlight">。
- 先用
Ctrl+D或Alt+F3选中多行文本(支持跨行、跨段落) - 按
Ctrl+Shift+G,输入div>span→ 每行变成<div><span>原内容</span></div> - 输入
ul>li*→ 自动为每行生成一个<li>,并包裹进<ul> - 注意:缩写里不能含空格或非法字符,
div > span中的空格会导致失败
多光标 + Emmet 编辑点跳转怎么配合?
生成带多个编辑点的结构(如 a[href="#"].btn{Link $})后,用 Ctrl+Alt+→ / ← 在 class、href、文本等位置间快速切换,比手动拖鼠标快得多。
这个功能在批量改链接、统一 class 命名、填充序号时特别关键。但前提是生成时用了 $ 占位符,否则没有编辑点。
-
li.item$*3展开后,三个item1/item2/item3是独立编辑点 -
div[data-id="$"]*2会生成两个data-id="1"和data-id="2",且光标停在数字上 - 若没用
$,比如div.class,生成后只有一个光标,无法跳转 - 跳转键在 Sublime Text 4 中默认启用,无需额外配置
Vue/JSX 文件里多光标 Emmet 为什么失效?
因为默认只认 html 语法作用域,<template> 块或 JSX 的 return() 里,Emmet 根本不监听。必须显式告诉它:“这些地方也按 HTML 解析”。
配置项 emmet_include_languages 是唯一解法,不配就只能切到纯 HTML 文件里写再复制粘贴。
- 打开
Preferences → Package Settings → Emmet → Settings – User - 加入:
"emmet_include_languages": {"vue-html": "html", "javascriptreact": "html"} - Sublime Text 4 还需确认
"emmet_enabled": true已开启 - 改完不用重启,但要确保文件右下角显示的是
Vue或JavaScript (React),不是Plain Text
真正卡住人的从来不是功能多难,而是缩写写错一个字符、语法没设对、或者以为 Vue 文件天然支持 Emmet —— 它不猜你想要什么,只认你写的字面量。多光标再快,也救不了格式错的缩写。


















