Sublime Text多文件批量替换需用Ctrl+Shift+F调出Find in Files面板、Where填“.”才搜全项目、启用.*正则模式、替换后手动Save All;默认不跨文件、不认正则、不自动保存,易误改。

Sublime Text 多文件批量替换不是“输完就点 Replace All”就能收工的事——它默认不跨文件、不认正则、不自动保存,硬上大概率改错 console.log 字符串里的键名、user_id 变量,甚至把路径里带下划线的文件名也一并干掉。
为什么 Ctrl+H 点 Replace All 没用?
因为 Ctrl+H 只作用于当前打开的单个文件,且默认关闭正则模式。你写 \d+ 或 ^import,它当普通字符串处理;搜 console.log,可能连 JSON 里的 "console.log" 都不放过。
-
Ctrl+H是单文件上下文,适合快速改当前文件 - 真正跨文件必须用
Ctrl+Shift+F(Windows/Linux)或Cmd+Shift+F(macOS)调出Find in Files面板 - 面板右下角的
.*图标必须点亮(变蓝),否则所有正则语法全失效 - Where 框留空 ≠ 全项目,它只扫当前已打开的标签页
Where 怎么填才真正扫到目标文件?
Where 是 Shell 风格过滤表达式,不是路径补全框。填错一个字符,90% 的文件就漏掉了。
- 整个项目:填单个英文点
.(不是./,也不是./src) - 只改 JS:填
src/**/*.js(双星号 ** 才递归子目录,斜杠统一用/,Windows 也不例外) - 排除依赖目录:用逗号分隔 + 减号前缀,如
., -node_modules/, -dist/, -build/ - 大小写敏感:Linux/macOS 下
src和SRC是两个目录;Windows 不区分,但 Sublime 默认按大小写匹配
正则替换怎么写才不踩坑?
Sublime 正则引擎是 PCRE 风格,但替换语法是自研的:. 默认不匹配换行符,\b 把下划线和数字当单词字符,$1 是唯一合法捕获组引用方式。
- 想把
user_name→userName,但避开username和__user_name?别信\buser_name\b—— 它会错误匹配到username。更稳写法:(? - 匹配 HTML 属性值,比如
src="images/logo.png"→src="{% static 'images/logo.png' %}"?别用src=".*\.png"(贪婪吞太多)。正确写法:src="([^"]*\.png)",替换为:src="{% static '$1' %}" - 跨行匹配必须加
(?s)前缀,例如(?s)<div>]*>.*?</div>;仅勾选面板左下角的.(即(?s)单行模式)容易误吞到下一个闭合标签 - 括号、点号等元字符在查找框中必须转义,例如
getUser$$([^)]+)$$→getUser({ $1 })
Replace All 后为什么没生效?
因为 Sublime 不自动保存——所有改动都缓存在内存里,关掉未保存的标签页,修改直接丢弃,没有跨文件撤销历史。
- 点完
Replace All,所有被改文件标签页出现星号*是正常现象 - 必须手动执行
File → Save All,或快捷键:Ctrl+K→Ctrl+B(Windows/Linux),Cmd+K→Cmd+B(macOS) - 大文件(>10MB)可能被跳过,右下角看编码是否为
UTF-8;GBK 文件得先右键转码再操作 - 某次替换后部分文件没变?先检查它们是否只读(右下角显示
RO),或是否被Where路径过滤掉了(比如写了**.ts却想改.js)
最危险的不是不会用,而是忘了自己正在操作的是纯文本——所有“看起来像”的东西,Sublime 都照单全收。每次 Replace All 前,务必先点 Find All 看高亮数量是否符合预期,人工核验几处上下文,比事后 Git revert 成本低得多。

















