必须用 find in files(ctrl+shift+f)批量修改多个 xml 文件,因其支持跨文件搜索替换;若 where 显示“open files”需先 open folder 加载项目;正则跨行需启用 .* 模式并勾选 “. matches newline”;替换应捕获标签内文本而非整标签,避免破坏属性和子节点;修改后须手动 save all,否则全部丢失。

必须用 Find in Files,不能用 Ctrl+H
Ctrl+H 只改当前打开的 XML 文件,且只作用于可见区域——折叠的节点、被隐藏的行全跳过。批量改多个 .xml 文件,唯一可靠路径是 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)。如果面板右下角 Where 框显示 “Open Files” 或灰显,说明还没加载项目:先 File → Open Folder… 选中含 XML 的根目录,侧边栏出现树形结构才算就绪。
XML 跨行匹配要开两个开关
默认正则不跨行,<title>[sS]*?</title> 这类写法会失效。必须同时启用:
- 点击面板右下角
.*图标(变蓝)开启正则模式 - 再按
Alt+.(Windows/Linux)或Cmd+Alt+.(macOS)勾选. matches newline
否则 [sS]、.*? 都只匹配单行,含换行的 XML 内容直接漏掉。
替换时别动标签结构,只改文本内容
想把所有 <name>John</name> 改成 <name>Jack</name>,但保留 <name id="1"></name> 这类属性和嵌套子节点?别用 <name>.*?</name> 全量匹配后整个替换——它会吃掉属性甚至子元素。更稳做法:
- 查找:
<name>([^</name>(捕获标签内纯文本) - 替换:
<name>Jack</name>(或用$1引用原内容做局部修改) - 若需保留缩进,查找写成
^(\s*)<name>([^</name>,替换用$1<name>Jack</name>
替换完不保存 = 白干
点 Replace All 后,所有 XML 文件标签页出现星号 * 是正常现象——Sublime 只把变更缓存在内存里。关掉窗口、崩溃、或切到其他应用再回来,改动全丢,且没有撤销历史可回溯。必须手动执行:
-
File → Save All,或 - 快捷键:
Ctrl+K然后Ctrl+B(Windows/Linux),Cmd+K然后Cmd+B(macOS)
尤其注意:某些 XML 文件若右下角显示 RO(只读),或编码不是 UTF-8(如 GBK),会被跳过替换——得先右键转码再操作。











