Notepad++多文件正则替换必须用Ctrl+Shift+F,在“在文件中查找”界面严格配置:启用“包括子目录”、选顶层根目录、正确设置文件过滤器(如.js;.ts)、单行正则匹配、执行前做“三连验”。

Notepad++ 多文件正则替换不是“打开所有文件再批量操作”,而是必须用 Ctrl + Shift + F 进入“在文件中查找”界面,且每一步配置错一个,就可能漏改、误改或静默失败。
必须启用“包含子目录”并校验根路径
很多人点了“在文件中查找”却只扫了当前文件夹——因为默认不递归。Notepad++ 不会自动进入子文件夹,必须手动勾选“包括子目录”。
- 按
Ctrl + Shift + F打开对话框,别用Ctrl + H(那是单文件) - 点击“目录”右侧的
…按钮,**选最顶层父目录**,不能选中间某层(否则子目录被截断) - 勾选“包括子目录”,否则
src/utils/里的文件根本不会被扫描 - 检查路径末尾有没有多余空格或反斜杠——
C:\project\和C:\project在某些版本下行为不一致
文件过滤器写错会导致全盘忽略目标文件
没加过滤器,Notepad++ 可能卡死或报错;写得太宽(如 *),又会误改 .dll、.exe 等二进制文件,导致损坏。
- 过滤器必须用分号分隔,不是逗号或空格:
*.js;*.ts;*.json - 通配符只支持
*和?,不支持**或正则语法 - 如果目标是日志文件,但写了
*.log却没生效,先确认文件实际扩展名是.LOG(Windows 不区分大小写,但旧版 Notepad++ 有时敏感) - 含空格的路径要用英文引号包裹(仅在命令行调用时需要,GUI 中不用)
正则模式下跨文件替换的三个硬约束
多文件替换共享单个正则引擎,但和单文件窗口不同:它不显示“.匹配新行”选项,也不支持 \R —— 所有匹配都按**单行处理**,换行符必须显式写出。
- 想匹配以
TODO:开头的整行?用^TODO:.*$,别用TODO:.*(可能跨行抓到不该动的内容) - 要删空行?
^\s*$有效,但\r\n\r\n替换为\r\n必须明确写成\r\n\r\n,不能依赖\n\n - 捕获组仍只认
\1~\9,\10会被拆成\1+0,多文件场景下更难调试 - 中文匹配前务必先转编码:菜单栏
编码 → 转为 UTF-8,否则[一-龥]或\u4e00-\u9fa5全失效
执行前必须做“三连验”,跳过等于白干
多文件替换不可撤回,且错误会扩散到所有匹配文件——一次误操作可能毁掉整个 config 目录。
- 第一步:先点“查找全部”,看左下角是否显示“找到 X 处”,并逐个点高亮项确认是否真为目标(比如
api_key和api_key_test是否都被圈中) - 第二步:对任意一个匹配结果,右键 → “在新标签页中打开”,切到该文件用
Ctrl + H小范围试替,验证替换逻辑是否符合预期 - 第三步:返回
Ctrl + Shift + F,确保“替换为”框里没残留旧内容,再点“全部替换”——注意按钮是“全部替换”,不是“全部替换在文件中”(后者是旧版 UI 文字,新版已统一)
最容易被忽略的是:多文件替换不继承当前文档的编码设置,每个文件按自身 BOM 或声明解析。一个 GBK 编码的 .ini 文件混在 UTF-8 项目里,正则会乱码匹配——宁可先批量转编码,也不要赌“应该没问题”。


















