notepad++跨文件批量替换必须通过ctrl+shift+f,严格指定绝对路径、分号分隔的文件过滤器、统一编码及正则模式下的$1反向引用,且替换后需手动保存。

Notepad++ 无法“自动识别要批量替换的文件范围”,必须手动指定绝对路径、文件过滤器、编码和查找模式,缺一不可;否则显示 0 occurrence(s) found 却实际有内容,且不报错。
Ctrl+Shift+F 是唯一真正跨文件批量替换的入口
Notepad++ 没有“项目级替换”或右键菜单批量替换功能。所有磁盘文件的批量修改,都必须走 Ctrl+Shift+F 打开的「在文件中查找」面板。它不读取当前打开的标签页,也不解析相对路径(如 ./src 或 src/),填错等于没操作。
- 目录字段必须填完整绝对路径,例如:
C:myprojectsrc(结尾不加反斜杠更稳妥) - 含空格或中文的路径无需引号,新版 Notepad++ 已兼容
- OneDrive/WSL 挂载点路径(如
\wsl$Ubuntuhomeuserproj)需确认 Notepad++ 进程有读权限——管理员运行不一定有效 - 路径末尾带括号(如
C:‚4(backup))不用转义,这不是正则区域
文件过滤器必须用英文分号严格分隔
过滤器不是“建议”,而是硬性白名单。写错格式 = 扫描开关被关闭,静默跳过所有文件。
- ✅ 正确:
*.js;*.ts;*.html - ❌ 无效:
*.js, *.ts(逗号)、*.js *.ts(空格)、*.js; *.ts(分号后空格) - 不支持
**/*.js或排除语法(如!node_modules);想跳过某目录,只能手动移出或清空过滤器再预览 - 过滤器为空 = 扫描所有文件,包括
.git/config、package-lock.json,务必先点「查找全部」预览匹配项
编码不一致会导致“找到但没替换”或乱码
Notepad++ 在 Ctrl+Shift+F 中统一用右下角状态栏显示的编码去解析所有目标文件。如果混着 UTF-8、GBK、ANSI,部分中文根本进不了匹配引擎。
- 右下角显示
ANSI,但你要处理的是 UTF-8 文件?替换后大概率出现???或直接跳过 - 临时解法:菜单「编码 → 转为 UTF-8-BOM」批量转存一批文件(注意 BOM 可能影响某些构建工具)
- 正则替换含中文时,
查找内容和替换为必须用相同编码输入,别复制粘贴来源不明的文本 - 换行符不一致也会影响多行匹配:
才能匹配 Windows 的 CRLF;R是 Notepad++ 内置通用换行符(等价于| |),比盲目勾选“.”更可靠
正则替换跨文件时反向引用必须用 $1
在「在文件中查找」面板启用正则模式后,捕获组的反向引用语法固定为 $1、$2。 在新版 Notepad++ 中已失效且不生效。
-
$0表示整个匹配项,$1是第一个(...)里的内容,编号按左括号顺序递增 - 例如重构变量前缀:
查找: tmp_(w+)→替换: cache_$1 - 又如把
class="btn"改成class="btn" data-role="button":查找: (class="[^"]*")→替换: $1 data-role="button" - 扩展模式(
、等)不支持$1,必须切到正则模式才能用捕获组
最常被忽略的一点:替换完成后,Notepad++ 不会自动保存任何文件。必须手动逐个保存,或关闭时选择「全部保存」——没有一键全存按钮,也没有“替换并保存”开关。这个动作一旦漏掉,前面所有操作等于白干。











