应使用 ctrl+shift+f(macos 为 cmd+shift+f)启动跨文件替换,ctrl+h 仅作用于当前文件;需确认 where 路径、开启正则与非贪婪匹配、正确使用 $1 捕获组,并务必执行 save all 保存更改。

用 Ctrl+Shift+F 而不是 Ctrl+H 启动跨文件替换
想改 HTML 标签内容(比如把所有 <p>Hello</p> 换成 <div>Hi</div>),必须用 Ctrl+Shift+F(macOS 是 Cmd+Shift+F)。Ctrl+H 只作用于当前打开的单个文件,哪怕你开了 50 个 HTML 文件,它也只动当前标签页——这是最常踩的坑。
启动后,面板底部会出现 Find、Replace、Where 三栏。别急着输内容,先确认 Where 框里填的是有效路径,比如 ./src/**/*.html 或 ., -node_modules/, -dist/(逗号分隔,斜杠统一用 /)。
正则必须开,且标签匹配要防贪婪
HTML 是嵌套结构,.* 会一路吃到下一个闭合标签甚至更远。写 <p>.*</p> 替换,很可能吞掉中间的 <span></span>、<img> 甚至整段脚本。
安全做法是用非贪婪或字符排除:
- 匹配引号内属性值:用
src="([^"]*.png)",不是src=".*.png" - 匹配标签内纯文本(不含子标签):用
<p>([^</p>,靠[^ 阻断向内穿透 - 若需跨行(如多行
<pre class="brush:php;toolbar:false;"></pre>),先点右下角.*图标启用正则,再勾选. matches newline,或在正则前加(?s)
没点 .* 图标?所有 .*、d、^ 都当普通字符处理,搜不到任何东西。
$1 引用捕获组时,括号必须存在且位置精准
想把 <h2>Title</h2> 改成 <h3>Title</h3>,同时保留中间文字,得靠捕获组:
查找:<h2>([^</h2>
替换:<h3>$1</h3>
注意:
- 必须有小括号包裹要保留的部分,否则
$1为空 -
$0是整个匹配(含<h2></h2>和),$1才是括号里内容 - 别混用
(Python 原生语法),Sublime 只认$1 - 如果原文有反斜杠(如路径),得双写:
C:\foo\bar
替换后不保存 = 白干,且无法撤销
点完 Replace All,所有被改的文件标签页右上角出现星号 *,说明变更还在内存里,没写入磁盘。
关掉窗口、崩溃、断电 → 全部丢失,Sublime 不存操作历史,Git 也没法回退(除非你提前 commit 过)。
必须手动执行:
- Windows/Linux:
Ctrl+K→Ctrl+B - macOS:
Cmd+K→Cmd+B - 或菜单:
File → Save All
最危险的环节不是正则写错,而是做完所有动作后,顺手关了 Sublime —— 所有改动直接进虚空。这点比语法错误更难排查,因为没报错,只有沉默的丢失。











