正则替换是给多行文本每行末尾加html标签的唯一稳解;用$匹配行尾、replace with填标签即可,wrap with abbreviation因包裹整块内容而不适用。

想给多行文本每行末尾都加同一个HTML标签?别用 Wrap with Abbreviation,它只会包成一个块——正则替换才是唯一稳解。
为什么 Wrap with Abbreviation(Ctrl+Shift+G)不适用多行追加
Emmet 的 Wrap with Abbreviation 本质是「包裹选区」,不是「逐行追加」。当你鼠标拖选多行时,Sublime 创建的是矩形选区,Wrap with Abbreviation 会把全部内容塞进一对标签里,比如:
line1 line2 line3
→ 变成:<div>line1\nline2\nline3</div>,而不是你想要的每行一个
- 遇到空行或首尾空格时直接报错:
Emmet: No content to wrap - 在非 HTML 语法模式(如 Plain Text)下完全不响应
- 缩写如
div会被当成包裹指令,不是追加指令
用正则 $ 匹配行尾,一步追加闭合标签
这是最直接、无依赖、跨语法通用的方法,全程在 Find → Replace 面板操作:
- 按
Ctrl+H(Windows/Linux)或Cmd+H(macOS)打开替换面板 - 勾选左下角的
.*(启用正则表达式) -
Find what填$(严格匹配每行末尾) -
Replace with填你要加的标签,例如:或<br> - 点
Replace All,立刻生效
注意:<br> 要写成 <br> 才符合 XHTML 或 strict HTML 规范;自闭合标签漏斜杠会导致校验失败。
批量加成对标签:分两轮,用 ^ 和 $ 配合
如果目标是每行都套上完整标签(如 <p>xxx</p>),不能靠一次正则完成,必须拆开:
- 第一轮:在行尾加闭合标签
Find what:$Replace with: - 第二轮:在行首加开始标签
Find what:^(匹配每行开头)Replace with:<p></p>
若需动态属性(比如每行开头是 URL,要转成 @#@#@#@#@#@#@#@#@#@0),就得用捕获组:Find what: ^(.+)$Replace with: @#@#@#@#@#@#@#@#@#@1
容易被忽略的细节:语法模式和空格陷阱
正则方法虽不依赖语法,但仍有两个隐形坑:
- 如果文件当前是
Plain Text模式,$仍能工作,但 Sublime 有时会对含 BOM 或混合编码的文件误判行尾,导致最后一行没被替换——建议先用File → Reopen with Encoding → UTF-8 - 行尾有不可见空格(如全角空格、NBSP)时,
$会匹配到空格之后,导致标签加在空格后面,视觉上“飘”了一截——可先用Ctrl+H→Find what:[ \t]+$→Replace with: 空 → 清掉行尾空格再操作
真正麻烦的从来不是怎么加,而是加完发现某几行没对齐、标签嵌套错位、或者属性值跑到了标签外面——那大概率是原始文本里混了缩进不一致的换行符或隐藏字符,得先清理再正则。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











