Notepad++「在文件中查找」必须填绝对路径,文件过滤器须用英文分号分隔,正则替换反向引用用$1而非\1,编码与换行符需匹配,且务必先「查找全部」预览。

“在文件中查找”必须填绝对路径,相对路径和空值无效
Notepad++ 的「在文件中查找」功能(Ctrl+Shift+F)不会读取当前打开的标签页或项目结构,它只认你手动填写的 目录 字段。这个字段必须是完整、可访问的绝对路径,比如 C:\project\src\utils,不能写成 ./src/utils 或留空。
常见错误是复制了资源管理器地址栏里的路径但没删掉末尾斜杠,或者路径含中文/空格却没加引号——虽然 Notepad++ 通常能容忍,但某些插件或旧版本会静默失败。
- 填错路径时,界面底部状态栏不报错,只显示“0 个匹配项”,容易误判为没找到内容
- 如果目标文件夹在 OneDrive、WSL 挂载点或网络驱动器上,需确认 Notepad++ 有读写权限(管理员运行不一定解决挂载点问题)
- 路径中若含括号如
(2024),无需转义;但若含正则特殊字符如*或?,别担心——这是路径输入框,不是正则表达式区
文件过滤器要严格按格式写,分号是分隔符不是可选符号
「文件过滤器」字段控制哪些后缀参与替换,语法是 *.js;*.ts;*.jsx 这种用英文分号 ; 分隔的列表。写成 *.js, *.ts 或 *.js *.ts 都会被忽略,Notepad++ 直接当无效过滤器处理,结果就是所有文件都不扫。
另外,大小写不敏感,*.JS 和 *.js 效果一样;但通配符只支持 * 和 ?,不支持 ** 递归匹配子目录——它默认只查当前层,子目录需单独添加路径或启用「包括子文件夹」勾选项。
- 想排除某类文件?不行,Notepad++ 没有“排除”语法,只能显式列出要包含的类型
- 过滤器为空 = 扫描所有文件(含
.git、node_modules下的文件),务必提前确认 - 修改前先点「查找全部」预览命中文件列表,比盲目「全部替换」安全得多
跨文件替换不生效?检查编码和换行符是否一致
替换后内容乱码、缩进错乱、中文变方块,大概率是编码不匹配。Notepad++ 在执行「在文件中查找」时,会按每个文件自身的编码加载并处理,但如果原始文件是 UTF-8-BOM,而你在替换框里输入的是 ANSI 编码文本,或反之,就会触发隐式转换。
另一个高频问题是换行符:Windows 文件用 \r\n,Linux/macOS 用 \n。你在正则模式下搜索 \n 却没勾选「. 匹配换行符」,就永远跨不了行;在扩展模式下搜 \n 只能匹配 LF,遇到 CRLF 文件得写 \r\n。
- 右下角状态栏显示的编码只是当前活动文件的,其他文件编码可能不同——批量操作时无法统一设置
- 含 BOM 的 UTF-8 文件,开头三个字节
\xEF\xBB\xBF很脆弱,替换时若误删或覆盖,后续编辑可能被识别为 ANSI - 建议批量操作前,用「编码 → 转为 UTF-8 无 BOM」统一整理一遍源文件,减少干扰
正则替换跨文件时,捕获组引用必须用 $1 而非 \1
在「在文件中查找」标签页里做正则替换,反向引用必须用 $1、$2 这种美元符号语法。用 \1 会被当成字面量反斜杠加数字,原样输出到文件里,而不是提取捕获内容。
例如把 const foo = 123; 改成 let foo = 123;,正则查找 const (\w+) =,替换为 let $1 = 才有效;写成 let \1 = 就会得到 let \1 = 这种错误结果。
-
$0表示整个匹配串,可用于包裹、前后加空格等场景 - 嵌套括号按左括号顺序编号,
((a)(b))c中$1是ab,$2是a,$3是b - 扩展模式下不支持任何反向引用,哪怕你写了
$1也会被当普通字符——必须确保「搜索模式」选的是「正则表达式」

















