ctrl+shift+f是notepad++唯一支持跨文件夹批量替换的功能,必须使用绝对路径、分号分隔多路径,正则替换用$1而非,替换后需手动保存。

Ctrl+Shift+F 是唯一能跨文件夹批量替换的入口
Notepad++ 不支持“自动识别多个分散路径”或“项目级根目录智能推导”,Ctrl+Shift+F 打开的「在文件中查找」面板是唯一绕过标签页、直接操作磁盘文件的路径。它不关心你当前打开了哪些文件,只认你填进去的绝对路径——哪怕这些路径彼此毫无关联。
常见错误现象:0 occurrence(s) found 却确定内容存在,大概率是路径写错,或误用了相对路径(如 ./src、../common)。
- 必须填**绝对路径**,例如
C:project-api和D:legacyutils,不能合并成一个字段;想扫两个不同盘符下的文件夹,得分别执行两次Ctrl+Shift+F - 路径末尾不加反斜杠(
C:project-api容易被部分版本截断),写成C:project-api更稳 - 含空格或中文没问题,但 WSL 挂载路径(如
\wsl$Ubuntuhomeusercode)需确认 Notepad++ 有读权限,管理员运行不一定有效
多个文件夹替换必须手动拼接路径 + 分号过滤器
Notepad++ 的 Ctrl+Shift+F 不支持通配符路径(如 C:projects*src)或数组式输入。如果你要同时处理 C:pp1src 和 C:pp2src 下的 JS 文件,没有捷径,只能分两轮操作:
- 第一轮:目录填
C:pp1src,过滤器填*.js;*.ts,勾选「包括子文件夹」,点「全部替换」 - 第二轮:目录填
C:pp2src,其他参数保持一致,再执行一次 - 如果两个路径下文件类型不一致(比如 app1 用
.js,app2 用.jsx),过滤器就得分别设为*.js和*.jsx
别指望插件帮你“自动聚合路径”——所有第三方插件调用的仍是 Notepad++ 原生 findInFiles API,参数校验逻辑完全一致,填错路径照样静默失败。
正则跨文件替换时捕获组必须用 $1,不是
你在单个文件里用 Ctrl+H 可能习惯写 引用捕获组,但在 Ctrl+Shift+F 面板里,这个语法**完全无效**。它只认 $1、$2,这是 Scintilla 引擎的硬性约定,和 Notepad++ 版本无关。
使用场景:把 require('./components/Button') 统一改成 import Button from './components/Button',且保留路径不变。
- 查找内容:
require(s*['"]([^'"]+)['"]s*) - 替换为:
import $1 from $1(注意:这里 $1 是路径字符串,不是模块名,需按实际结构调整) - 务必勾选「匹配正则表达式」,且右下角编码显示为 UTF-8(避免中文路径被解析成
???) - 扩展模式(
.*?)不支持$1,必须切到正则模式才能用捕获组
替换后不保存 = 白干,且无法一键全存
Ctrl+Shift+F 的「全部替换」只把修改载入内存,不会自动写回磁盘。你看到状态栏提示“Replaced X occurrences”,只是改了缓存,关掉 Notepad++ 就丢。
- 必须手动逐个保存:切换到每个被修改的标签页,按
Ctrl+S;或者右键标签页 → 「全部保存」(但仅对已打开的标签页生效,不影响未加载的文件) - 如果没打开任何文件,
Ctrl+Shift+F替换完也不会生成新标签页——它只改磁盘原文件,但你不主动保存,它就不触发 UI 刷新 - 遇到大量文件时,建议先点「查找全部」预览匹配项,确认无误后再点「全部替换」,否则改错没法批量撤回
最易忽略的一点:当一批文件混着 UTF-8、GBK、ANSI 编码时,Notepad++ 会统一用右下角显示的编码去解析所有文件。结果就是——部分文件里的中文根本进不了匹配引擎,连“查找全部”都看不到,更别说替换了。











