VSCode中批量将多行文本用Emmet包裹为结构:先确保语言模式为HTML,选中纯文本后按Ctrl+Shift+P输入“Emmet: Wrap with Abbreviation”,输入ul>li回车即可,每行自动变为独立并嵌套于内。

已写好文本怎么批量转成- 结构
直接用 Emmet 的 wrap with abbreviation 功能,不是重写缩写再按 Tab。你已经有几行文字(比如每行一个菜单项),想把它们整体包进 <ul></ul>,每行变成一个 <li> —— 这个操作不靠输入 ul>li*5,而是选中后「包裹」。
常见错误现象:选中多行文本后敲 ul>li 再按 Tab,结果只生成一对空标签,原文本没被套进去;或者按完 Tab 没反应,其实是触发了代码补全而非包裹功能。
- 确保光标在 HTML 文件里,且右下角语言模式是
HTML(不是Plain Text或JavaScript) - 用鼠标或
Shift+↓选中你要处理的多行纯文本(每行内容不要带标签,例如:首页、关于、联系) - 按下快捷键:
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Emmet: Wrap with Abbreviation,回车 - 在弹出的输入框里输入
ul>li,然后回车——Emmet 会自动把每行文本作为<li>的内容,外层套上<ul></ul>
为什么ul>li能对多行生效,而div*3不行
因为 wrap with abbreviation 是专门设计来处理「已有内容」的场景,它会把选中的每一行当作一个独立节点,按缩写的嵌套逻辑逐层包裹。而 ul>li*3 这类缩写只在「光标在空白处」时展开为新结构,不会读取已有文本。
参数差异很关键:ul>li 表示「先建 ul,里面每个子节点都是 li」;如果你写成 ul>li* 或漏掉 >,包裹会失败或只生成一个 <li>。
- 想给每项加 class?输入
ul>li.item$→ 得到<li class="item1">、<li class="item2">……注意$必须紧贴li后,不能写成li .item$ - 文本里含引号或特殊字符?Emmet 会自动转义,但建议先清理换行符(如末尾空格、制表符),否则可能生成空
<li> - 如果包裹后格式错乱(比如所有
<li>挤在同一行),说明当前没有启用 HTML 格式化,可手动按Shift+Alt+F格式化一次
Vue / JSX 模板里也能用吗
能,但要确认语言模式正确。在 .vue 文件的 <template></template> 区域,VSCode 默认识别为 vue-html,只要你的设置里有 "vue-html": "html" 映射,Wrap with Abbreviation 就可用。JSX(.jsx)同理,需配置 "javascriptreact": "html"。
容易被忽略的一点:这个功能对缩进敏感。如果原始文本是用空格缩进的(比如从其他文档复制过来),Emmet 可能误判为「同一行内容」,导致只生成一个 <li>。实际操作前,先用 Ctrl+Shift+P → Format Document 清理一下缩进更稳妥。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











