选中多行后按Ctrl+Shift+G没反应,先确认文件语法是否为HTML/JavaScript、输入法是否为英文、选区是否含空行或首尾空白符;ul>li*只生成一个li因整块选区被视作单单元,需用Ctrl+L逐行选中或Ctrl+Shift+L拆光标再包裹。

选中多行后按 Ctrl+Shift+G 没反应?先确认这三件事
不是快捷键坏了,而是 Emmet 的 wrap_with_abbreviation 命令对上下文很敏感。常见失效场景包括:
• 当前文件语法不是 HTML 或 JavaScript(右下角显示 Plain text 或 Markdown 时必然失败)
• 输入法处于中文状态,按下 Ctrl+Shift+G 后键盘输入被拦截,导致缩写无法提交
• 选区包含空行或首尾空白符过多,Emmet 会拒绝包裹并静默退出
用 ul>li* 包裹多行文本时,为什么只生成一个 li?
Emmet 的 * 运算符依赖「每行一个选中单元」。如果你是用鼠标拖选连续多行(而非逐行选中),Sublime 默认把整块当做一个选区,ul>li* 就只会套一层 <li>,而不是每行一个。
正确做法:
• 先用 Ctrl+L(Windows/Linux)或 Cmd+L(macOS)逐行选中目标行(光标停在每行开头,按快捷键即可)
• 或用 Ctrl+Shift+L 将当前选区按换行符拆成多光标
• 再按 Ctrl+Shift+G,输入 ul>li(不加 *),回车后每行自动变成独立 <li> 并嵌入 <ul></ul>
想包成 ...
,但输 pre>code 没闭合?
Emmet 缩写必须严格匹配嵌套规则。pre>code 是合法的,但实际生成效果取决于你当前选中的内容是否“可被包裹”。如果选中的是带缩进的代码块,Emmet 可能因解析失败而只输出开标签。
更稳妥的做法:
• 先确保选区纯文本(无多余空格/制表符)
• 输入 pre>code 后回车,若未自动闭合,手动按 Ctrl+Shift+P → 输入 Indentation: Reindent Lines 统一格式
• 注意:<pre class="brush:php;toolbar:false;"></pre> 对空白符敏感,包裹后删掉标签内首尾换行,否则渲染会多出空行
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
自定义快捷键绑定 wrap_with_abbreviation 时,command 名写错就调用失败
Sublime 用户键位配置里,wrap_with_tag 和 wrap_with_abbreviation 是两个完全不同的命令,行为差异很大:
• wrap_with_tag:原生命令,只接受简单标签名(如 div、p),不支持点号、尖括号、星号
• wrap_with_abbreviation:Emmet 命令,支持 div.container、ul>li* 等完整缩写
错误示例:
• 键位里写 "command": "wrap_with_tag" 却想输 section>header+h1 → 直接报错或忽略输入
• 忘记加 context 限定,导致在 JS 文件里按快捷键弹出 HTML 标签框,干扰正常编码
立即学习“前端免费学习笔记(深入)”;
最易被忽略的一点:Emmet 的包裹结果默认不保留原始缩进。多行文本包裹后,内部内容会顶格对齐,需要额外执行一次缩进命令才能还原结构——这点在处理嵌套较深的组件模板时尤其麻烦。


















