唯一稳解是emmet_wrap_with_abbreviation命令:Ctrl+Shift+G失效主因是语言模式错误、中文输入法拦截、选区含空行或空白符;ul>li*仅生成单个li因未逐行选中,须用Ctrl+L或Ctrl+Shift+L拆多光标后再包裹。

直接用 emmet_wrap_with_abbreviation,别手敲标签、别硬套多光标——这是唯一能稳住嵌套、属性和闭合逻辑的操作。
为什么 Ctrl+Shift+G 按了没反应?
这不是快捷键坏了,是 Emmet 对上下文很挑:
- 当前文件语法不是
HTML或JavaScript(右下角显示Plain text或Markdown就必然失败) - 输入法是中文状态,键盘输入被拦截,缩写根本没提交出去
- 选区含空行或首尾大量空白符,Emmet 会静默拒绝包裹
ul>li* 只包出一个 li?那是你没拆光标
Emmet 的 * 运算符依赖「每行一个独立选中单元」。鼠标拖选连续多行 → 整块被当做一个选区 → ul>li* 只生成一个 <li></li>
正确做法:
- 先用
Ctrl+L(Win/Linux)或Cmd+L(macOS)逐行选中目标行 - 或用
Ctrl+Shift+L把当前选区按换行符拆成多光标 - 再按
Ctrl+Shift+G,输入ul>li(不加*),回车后每行自动变成独立<li></li>并套进<ul></ul>
自定义快捷键绑定时 command 名写错就白配
wrap_with_tag 和 emmet_wrap_with_abbreviation 是两个完全不同的命令:
-
wrap_with_tag:原生命令,只认div、p这类纯标签名,输div.container直接忽略 -
emmet_wrap_with_abbreviation:Emmet 命令,支持section>header+h1、div.x[data-id=$]等完整缩写 - 键位配置里写错 command 名,比如把
emmet_wrap_with_abbreviation拼成emmet_wrap_with_abbr,按下去毫无反应 - 没加
context限定,可能在 JS 文件里误触发 HTML 包裹,干扰正常编码
真正容易翻车的地方,是缩写本身合法但上下文不匹配——比如在 Plain text 模式下输 pre>code,Emmet 解析失败,只吐出开标签;或者某行末尾带不可见空格,Ctrl+Shift+L 后光标停在缩进起点而非真·行首,导致包裹错位。这些细节不试一遍根本意识不到。

















