先声明一下我的习惯:我重度依赖 Notepad++,基本上所有临时文本处理、日志分析、代码片段整理都在它里面完成。这玩意儿体积小、启动快、打开大文件不卡,但很多人只拿它当“高级记事本”用,顶多按个 F5 跑个脚本。实际上,只要把排版和格式化这一套玩明白,Notepad++ 能从“文本编辑器”直接升级成“文本加工流水线”。今天这篇东西,就是把我在格式化这条路上踩过的坑和沉淀下来的方法做个完整梳理。
这篇文章适合谁看?两类人。一类是日常被 JSON、日志、脏数据折磨的开发、测试、运维,想要一键把乱糟糟的文本理顺;另一类是经常处理文档、字幕、章节目录、批量文本替换的内容从业者,需要在不装重量级软件的前提下,用最轻量的方式完成规范化排版。我会从格式化思路、高频操作、疑难杂症、正则批量排版、特殊场景实战这几个角度一个个拆开讲,尽量做到拿来就用。
1. 内容整体设计与思路拆解
1.1 摆脱“复制到网页再格式化”的恶性循环
很多人的第一反应,是遇到 JSON 打不开、日志挤成一坨、代码缩进全部乱掉的时候,打开浏览器搜“JSON 格式化工具”,然后把内容贴到网页里格式化再贴回来。
这条路我走了很久,后来实在受不了了。网页工具的问题很多:一是内容一旦涉及敏感数据,贴到第三方网站本身就是风险敞口;二是来回复制粘贴,格式容易二次损坏,尤其是长文本、中文内容、特殊转义字符,经常在剪切板里悄悄变了形;三是效率太低,每次都要切换窗口,完全打断工作流。
Notepad++ 里面其实内置了相当完整的文本处理能力,配合插件生态,格式化这件事完全可以做到离线完成、批量完成、可定制完成。我的总体思路很简单:按文本类型分场景处理,能用内置功能的不装插件,能离线完成的不碰网页工具,能一个正则解决的不写脚本。
这套思路的核心,是先理解“格式化”的三个层次:
- 第一层是显示层排版:比如换行、缩进、行尾空格、编码统一,这一层不改变语义,只让文本“看起来舒服”。
- 第二层是结构层解析:比如 JSON、XML、SQL、Python 代码,编辑器需要理解语法结构,才能正确缩进和格式化。
- 第三层是内容层变换:比如批量给每一行加编号、把 A 列和 B 列对齐、按规则提取关键字段,这一层已经不是“格式化”而是“数据处理”,但通常被并入排版需求里。
很多人只停留在第一层,遇到第二层的问题就束手无策,遇到第三层干脆手动操作。这篇文章按这三个层次分别给出方案,你以后遇到任何“排版乱、格式脏”的问题,先判断属于哪一层,再选择对应手段,就不会再抓瞎了。
1.2 为什么选择 Notepad++ 而不是其他编辑器
有人会问,VS Code、Sublime Text、甚至 IDEA 都能格式化,为什么还要折腾 Notepad++?我个人的答案很简单:轻量、快速、纯粹。
VS Code 启动就要好几秒,打开一个几十 MB 的日志文件经常卡到怀疑人生,各种自动格式化配置有时候还会帮倒忙(搜索词里就有人问“vscode 自动格式化代码在哪关闭”)。IDEA 全家桶更不用说,队列负载高的时候,格式化一个文件要等半天。而 Notepad++,打开超大日志基本秒开,做格式化、批量替换、列操作都非常利落。
另外一个原因是它的“零干扰”特性。VS Code 的自动保存自动格式化、自动修剪尾部空格、自动补全引号括号,这些功能在写正式代码时确实好用,但在处理脏数据、临时文本、非代码文件时经常好心办坏事——我遇到过好几次,从外部复制的一段带缩进的文本,粘进 VS Code 就被自动改得面目全非(搜索热词里那句“trae 自动保存后字符被自动删除,格式化错乱了”说的就是这类问题)。Notepad++ 默认不搞这些小动作,所有操作由你自己触发,可控性更强。
所以我把 Notepad++ 定义为“文本的粗加工车间”:所有脏乱差的原始素材先到这里整理、清洗、标准化,再进入正式的生产环境。这套工作流我用了很多年,稳定可靠。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高频格式化操作:从菜单到插件全覆盖
2.1 内置菜单:先摸清“编辑”菜单里的隐藏排版功能
很多人不知道,Notepad++ 的“编辑”菜单里本身就藏着一批排版相关的功能,只是藏得比较深。其中几个我用得最频繁的:
- 空白操作 → 行首/行尾空白去除:这个功能对清理从网页或 PDF 里复制出来的文本特别有用。我试过复制一段 PDF 的文字,每一行前面都带四五个空格,如果直接导入其他系统会干扰格式。用“行首空白去除”一次性就能清理干净。
- 行操作 → 合并行/拆分行:合并行可以把多行文本合成一行(选好区域后按 Ctrl+J),拆分行则相反。这个在做日志压缩查看、把长 SQL 压缩成单行时很好用。
- 缩进与对齐:Tab 键缩进和 Shift+Tab 反缩进是基本功,但很多人不知道可以选中多行后统一操作,还能通过“设置 → 首选项 → 语言”里调整 Tab 的替换宽度(推荐设为 4 空格)。
- 行尾空格可见化:通过“视图 → 显示符号 → 显示行尾和制表符”,能直观看到每一行末尾有没有多余空格。这对我写 Shell 脚本、Python 代码特别重要,因为行尾空格有时会导致脚本报错。
2.2 JSON 格式化:别急着装插件,先学会用对工具
JSON 格式化是搜索热词里的重灾区,也是我工作中被问得最多的需求。先说结论:Notepad++ 本身不自带 JSON 格式化菜单,需要依赖插件。插件推荐装两个:JSON Viewer 和 JSTool。
JSON Viewer 插件:装好后,打开一个 JSON 文件,点击“插件 → JSON Viewer → Format JSON”,就能把压缩成一行甚至没有空格的 JSON 展开成树状可读格式。它还支持折叠节点、跳转到指定层级,排查复杂嵌套结构时特别有用。快捷键是 Ctrl+Alt+Shift+J,但我一般直接记菜单位置。
JSTool 插件:和 JSON Viewer 功能相似,但 JSTool 的格式化更“保守”,不会自动排序、不会改变 key 的顺序,纯粹做缩进和换行。这在处理配置类 JSON 时更安全,因为有些 JSON 文件对 key 的顺序有约定。
我实际试过的情况是:如果 JSON 文件本身语法错误(多了个逗号、少了引号、中文字符变成乱码),用格式化功能可能会得到一坨更乱的输出。这时候要先检查语法。Notepad++ 在打开 JSON 文件时会根据扩展名触发语法高亮,如果整个文件都是同一种颜色没高亮,说明解析失败,大概率是你的 JSON 有问题。
注意:格式化 JSON 之前,务必先看一眼文件编码。UTF-8 带 BOM 和 UTF-8 无 BOM 在处理中文时表现不一样,如果出现格式化后中文全部变成“锟斤拷”或者问号,先别急着卸载插件,去“编码”菜单里转成 UTF-8 无 BOM 再试一次。
2.3 XML 与 SQL 等其他结构文本的格式化方案
JSON 之外,XML 也是配置文件重灾区。好在 Notepad++ 对 XML 的支持比 JSON 更原生态,而且还带一个“XML Tools”插件。安装 XML Tools 之后,可以直接用 Ctrl+Alt+Shift+B 对 XML 进行语法检查和美化排版。我个人建议是:
- XML 文件先做语法校验,再做格式化。XML Tools 里自带“Check XML syntax”功能,能精确到行号和列号告诉你哪里写错了。
- SQL 格式化就不太适合依赖插件了。Notepad++ 自带的 SQL 高亮只提供颜色,不负责缩进。我的做法是用内置的“行操作 → 合并行”把 SQL 压缩成一行,然后交给正式数据库客户端去格式化。如果一定要在 Notepad++ 里做 SQL 排版,可以用插件
Poor Man's T-SQL Formatter,但效果仁者见仁,我对它的依赖不高。
这里想多说一句:格式化工具不是越多越好,关键是知道每个工具擅长什么。JSON 用 JSON Viewer,XML 用 XML Tools,代码用 NppExec 配合外部格式化程序,这是我在 Notepad++ 生态里沉淀出来的最优组合。一次只解决一类问题。
2.4 Python 格式化:内置菜单不够用,用 NppExec 调用外部工具
搜索词里出现了很多次“python 格式化输出 f”,我猜大家的需求有两层:一是在 Notepad++ 里怎么对 Python 代码做格式化,二是 Python 里 f-string 输出怎么控制对齐和换行。
先说前者。Notepad++ 对 Python 只有语法高亮,没有内置的 PEP8 自动格式化。我的方案是使用 NppExec 插件调用外部 black 或 autopep8。NppExec 本质上是在 Notepad++ 里跑命令行,配置好后按 F6 就能对当前文件执行 black --line-length 100 "%(FULL_CURRENT_PATH)",实现一键格式化。
配置步骤也不复杂:
- 在命令行环境里先安装好 black:
pip install black。 - 在 Notepad++ 里安装 NppExec 插件(插件管理器里直接搜)。
- 按 F6,在弹出的输入框里输入命令,保存为脚本,之后就能反复调用。
- 建议给脚本设置快捷键,我设的是 Ctrl+1,按一下当前 Python 文件就排版完成。
这个方案的妙处在于:Notepad++ 只负责触发和显示,实际格式化逻辑全部交给专业工具执行。我不需要维护插件里的格式化规则,black 的升级、规则变更会直接生效。同理,你也可以用 NppExec 调用 prettier 格式化前端代码、调用 clang-format 格式化 C/C++ 代码。这就是把 Notepad++ 变成“任意语言的格式化前端”的思路。
再说 f-string 的输出对齐。Python 里很多人不知道 f"{value:<10}" 这种格式控制语法:< 是左对齐,> 是右对齐,^ 是居中对齐,后面的数字表示最小宽度。我在写命令行输出表格时,就靠这个把多列数据对齐得漂漂亮亮。这个不是 Notepad++ 的功能,但结合前面的 NppExec 方案,你在 Notepad++ 里改完代码一按快捷键就能看到格式化效果,整个流程非常顺。
3. 排版错乱与编码问题排查
3.1 格式化后中文变乱码:先查编码,再动内容
这个我要单独拎出来讲,因为搜索词里“格式化错乱了”“字符被自动删除”这类问题,百分之八十都是编码问题,不是格式化工具的问题。
Notepad++ 右下角状态栏会显示当前文件的编码格式。常见的三种情况:
- UTF-8 无 BOM:最通用的格式,网站和脚本首选。
- UTF-8 带 BOM:Windows 系软件(比如记事本)默认保存格式,有些老脚本会因此报错。
- ANSI:Windows 简体中文环境下的“本地编码”,对不同语言环境不通用。
如果你打开一个原本是 ANSI 编码的中文文件,然后在“编码”菜单里把它转成 UTF-8,内容显示可能一切正常。但如果你反过来,把一个 UTF-8 的文件转成 ANSI,中文几乎必乱。另一个经典坑是:从网页复制的文本默认带各种格式,粘贴到 Notepad++ 里看着没问题,一保存再打开就变成问号。这通常是因为内容里混入了不可见字符或特殊断行符。
我的排错顺序是:
- 先看右下角当前编码;
- 用 Ctrl+A 全选,复制到新文件;
- 在“编码”菜单里先选“转为 UTF-8 无 BOM 编码”;
- 保存后用其他工具验证(比如浏览器打开、脚本读取)确认没有乱码。
这一步做完,大部分“格式化后乱码”的鬼故事都能终结。记住:编码不是格式化的附属功能,而是格式化的前置条件。编码不统一,再怎么排版都是白费。
3.2 换行符不一致导致排版好后又乱掉
Windows 和 Linux 的换行符不一样:Windows 用 \r\n,Linux 用 \n,老版 Mac 用 \r。Notepad++ 右下角状态栏会显示当前文件的换行符格式(显示成 Windows (CRLF) 或 Unix (LF))。
我在实际工作中遇到过一个特别典型的场景:用 Python 脚本生成了一批文本,然后在 Notepad++ 里分行查看没问题,但一提交到 Git 上,代码的每一行末尾都出现红色标记。后来才发现是换行符混合了——脚本输出的文件是 LF,Notepad++ 编辑时改了几行,可能改成了 CRLF,文件里两种换行符并存。
解决办法很简单:在“编辑 → 行操作 → 转换到其他格式”里统一转换。Unix(LF) 和 Windows(CRLF) 之间切换是高频操作。我的习惯是:明确这个文件的最终使用场景之后再选换行符。写 Shell 脚本和部署到 Linux 服务器上的配置文件,统一用 LF;给 Windows 用户看的手工文档,用 CRLF。
另外,转换之前先在“视图 → 显示符号 → 显示行尾符号”里看一遍,明确当前文件里到底有没有混用,别盲目转换。混用状态下,直接盲目转换可能把内容修改得面目全非。
3.3 自动格式化“吃字符”:编辑器的好心是灾难
搜索词里那句“trae 自动保存后字符被自动删除”让我很有共鸣。这类问题的根源在于:现代编辑器默认会开启“自动修剪尾部空白”或者“自动格式化”功能,在保存时自动删除行尾空格、自动调整缩进。 这在写代码时挺好,但在处理特殊格式文本(比如 Markdown 中的多行代码块、Jinja2 模板、带特殊空格的表格文本)时,等于在你不知道的情况下帮你改了文件内容。
Notepad++ 默认不会做这种“好心”的事,但如果你装了某些插件(比如 NppAutoIndent 或者某些预览插件),也可能触发相似行为。我的建议是:用 Notepad++ 做文本清洗时,关闭所有自动格式化选项。具体路径是“设置 → 首选项 → 自动完成”,把里面的自动缩进策略调整为保守模式;在“编辑 → 空白操作”里,不要勾选任何“自动去除”相关的选项。
如果你需要保留文本里的特定空格数量(比如写 SQL 对齐注释、画 ASCii 表格),最好养成一个习惯:格式化之前,先备份一份原文件副本。Ctrl+Shift+S 另存一份乱版原始文件,出了任何问题都能回退。这个习惯救了我很多次。
4. 正则表达式批量排版:真正的高效进阶
4.1 为什么正则表达式是排版的核心能力
如果说插件解决的是“已知结构”的格式化,那正则表达式解决的就是“未知结构”的规范化。Notepad++ 的正则引擎虽然不是 PCRE2 完整版,但对日常文本处理完全够用。它的查找替换对话框(Ctrl+H)里提供了三种模式:普通、扩展(\n、\t 等转义)、正则表达式。
我看过很多人的正则用法,只停留在 ^ 和 $ 匹配行首行尾、.* 匹配任意内容。实际上,在排版场景里,最常用的是这几组:
\s+:匹配任意空白字符(空格、Tab、换行),用于清理多空格、统一分隔符。^\s*和\s*$:行首和行尾的空白,用于去除每行前后的多余空格。$配合替换内容加\n:在每一行末尾统一追加内容或符号。(.*)配合\1:捕获组引用,用于把多行结构改写成单行结构或提取特定字段。
打个生活化比方,普通查找替换是一场“把房间里的每一件东西放到指定位置”的整理,而正则替换是“按规则把所有门都涂成同一种颜色、把所有窗户都换个朝向”的批量改造。后者才是真正能从源头解决排版问题的力量。
比如一个非常常见的需求:把一段带行号的文本去掉行号。你从 PDF 复制出来的文本每行开头都是数字加空格,手动删几百行肯定疯掉。用正则查找 ^\d+\.\s*,替换留空,一键搞定。这就是正则给排版带来的效率跃升。
4.2 实战:批量去除行尾空格、统一分隔符、提取关键内容
我举三个我在工作中频繁使用的正则实战案例,每个都可以直接套用。
案例一:批量去除每一行的行尾空格和 Tab
查找目标:[ \t]+$,替换为留空。注意要先把“匹配模式”切到“正则表达式”,并勾选“匹配所有行”。这个操作在清理从网页复制的文本、统一格式时非常常用。如果在写 Markdown 或者 Latex,行尾空格有时会带来不必要的麻烦,这个正则一梭子全部清干净。
案例二:把多个连续空格或 Tab 统一替换成单个分隔符
查找目标:[ \t]+,替换为逗号。这个在把表格数据从纯文本转成 CSV 时特别实用。比如你在网页上复制了一个产品列表,项目之间是多个空格分隔,但空格数量不固定,直接转 CSV 会错位。用这个正则把它们全变成逗号,CSV 结构就规整了。
案例三:提取日志里的特定字段
比如日志里每行都长这样:
code复制2025-01-12 13:22:31 INFO user_id=1024 action=login ip=192.168.1.1
你想把所有 ip 字段提取出来做排序查重,在查找框里输入 ip=([0-9.]+),替换为 \1,然后用“标记”功能或者“查找全部”把所有匹配的行列出来。你还能配合“替换 + 在文件中查找”实现跨文件批量操作,把几个日志文件里的 ip 一次性全部提取。
这三个案例只是冰山一角。正则的威力就在于组合。你把“捕获组”“空白字符”“行首行尾锚点”这几个基础概念吃透,就能组合出无数种排版技巧,彻底告别手工整理。
4.3 宏录制与批量操作:把重复排版动作变成一键执行
如果正则解决的是“内容怎么变”的问题,那宏解决的就是“操作怎么做”的问题。Notepad++ 的宏录制功能(“宏 → 开始录制”)可以把你的一系列操作录下来,之后一键重放。
举个典型例子:我经常需要把一批 Markdown 文件里的标题统一加上编号。手动操作是:每一行开头插入 ## ,再把原来的标题文字加粗,然后跳到下一个位置。这个过程四五步,文件一多就得疯。用宏录制一次之后,我只需要在剩余文件里执行“宏 → 运行多次”,就能批量处理。
宏和正则还能配合使用:先录制一段“查找替换 + 格式化”的复合操作,然后用“在文件中查找”和“全部替换”跨目录批量执行。我以前整理过一个有 200 多个章节的文档目录,所有章节标题格式都不一样,有的带编号有的不带,有的有多余空格。我就是用“正则替换 + 宏 + 在文件中查找”三步走,把所有标题统一成同一种格式,前后不到十分钟。
有人说这不算“排版”,更像是“批处理”。但我自己的经验是,排版需求做到后期,一定会涉及大量重复劳动,而用宏录制把重复动作固化下来,是从“会用编辑器”到“会加工文本”的一道分水岭。
5. 场景实战与避坑经验
5.1 AI 翻译保持原有排版:手动格式化的妙用
搜索词里有一句“ai翻译保持原有排版的原理”,我猜很多人遇到过这种情况:把一段带标题、列表、表格的文本丢给 AI 翻译,翻译回来之后,原文的排版结构全没了,变成了一坨顺连的段落。
我自己测试过很多次,发现 AI 翻译破坏排版的原因有几个:一是原文里的 Markdown 符号被当成普通文本翻译了;二是原文用 Tab 或连续空格做的对齐,在翻译后空格数量不一致;三是列表编号被翻译成“一、二、三”之类的中文序号,结构全乱。
这里 Notepad++ 能帮你做一件事:翻译之前先给关键结构打上“标注”。我的做法是,先用正则把 Markdown 的标题行、列表符号、表格分隔符全部替换成特殊标记(比如 【TITLE】 替换成 # ),然后丢给 AI 翻译,翻译完在 Notepad++ 里用“反向替换”把标记复原,同时检查每一行的缩进和换行。
这个思路的本质是:在格式化和翻译两个环节之间加一个“中间表示层”,让格式化规则和翻译流程解耦。 翻译工具负责内容,Notepad++ 负责结构,各管一段。排版这件事最怕的就是“把结构问题混入内容问题”,而中间表示层恰好能分开它们。
5.2 场景图与道具资产排版:用“分隔符+区块”方案管理复杂文本结构
搜索词里这类词条让我们注意到“ai人物资产的排版。每个场景图为什么有两种。补充道具资产以及制作分镜图”,这种概念本身就是大的话题方向,在文本排版层面也有对应解法。在只有纯文本环境的条件下,人物资产、场景图、道具资产这类多类别要素,通常是靠层级缩进、分隔线和编号来区分的。
我在处理这种复杂结构时,通常会先制定一个“排版协议”:
- 用一级分隔线(
====)区分大模块,比如“角色”模块和“场景”模块。 - 用二级缩进(两个空格或 Tab)表示从属关系,比如场景图下的两种变体用“A 型”和“B 型”区分。
- 用固定编号(
[AX-01])做资产唯一标识,方便下游程序解析。
这一步的重点不是“文本好不好看”,而是“结构是否机器可读”。如果你之后要把这些文本内容导入表格、数据库或者画布工具,那你的排版方式就得提前规划。很多时候,排版不是给眼睛看的,是给代码看的。Notepad++ 天然支持正则解析和列编辑,正好适合对这类“半结构化文本”做批处理。
再退一步说,如果你的最终目标是制作分镜图或补充道具资产,那 Notepad++ 的角色就是“内容仓库”和“结构整理器”。所有散乱的创意要点先在编辑器里用统一的排版协议整理,整理好后,再把这套结构化文本导出给画布工具或者分镜软件。这一步做得越规范,后期导入的麻烦越少。
5.3 格式化前的备份与版本管理
最后提一个无数次救过我的习惯:在任何大规模格式化之前,先备份。 方法有很多种,比如直接复制一份 .bak 文件,或者用 Notepad++ 的“会话”功能把当前打开的文件列表和内容快照存下来。我的做法是直接在命令行里执行:
bash复制cp original.txt original.txt.bak
然后才开始动手。这不是因为格式化工具容易出问题,而是因为格式化操作往往不可逆——特别是正则替换,一旦你执行了“全部替换”,想回到替换前的状态只能靠撤销,而如果中间还有其他操作介入,撤销链早就被冲断了。
更进阶的做法是利用 Git。如果你经常处理文本资产,建议把整个工作目录纳入版本管理。每次格式化前提交一次,格式化后发现不对劲,git checkout 一键回滚。这么做看着麻烦,实际上能省下大量恢复成本。我在大规模批量正则替换前,如果文件数量超过几十个,几乎都会先 git add -A && git commit -m "before format" 一下。
5.4 插件安装与离线环境下的格式化备选方案
很多企业内部网络是隔离的,不允许在线安装 Notepad++ 插件。这时候你就要学会“带包安装”。在能上网的机器上,从 GitHub 下载好需要的插件 DLL 文件(比如 Jsonviewer.dll、NppExec.dll),手动拷贝到 Notepad++ 安装目录下的 plugins 文件夹中对应版本号子目录里,重启软件就能生效。这个方法我试过很多次,离线环境下完全可行。
如果没有带插件的条件,纯靠内置功能也有一批“土办法”:
- JSON 压缩文本想格式化,可以先在“替换”里用正则
},替换为},\n,再对{和}周围手动换行,虽然不是完美格式化,但应急够用。 - 带缩进的代码想统一缩进宽度,用“查找替换”把 Tab 批量替换成四个空格,再把四个空格替换成两个空格等。
- 日志时间戳想对齐,可以用“列编辑”功能:按住 Alt 键拖动鼠标,实现列选择,然后批量插入或删除指定列的内容。
这些土办法的优点是零依赖,缺点是处理复杂结构时比较费劲。所以我的建议是:有条件就装插件,没条件就用内置功能凑合,但不管哪种方式,都要保持对正则的熟练。 正则才是跨环境通用的硬通货。
我在实际使用中最深的体会是:Notepad++ 的强大从来不是因为某个单一功能,而是所有工具组合起来之后形成的那种“加工文本”的流畅感。格式化作为最基础的一环,它的核心不是按钮和菜单,而是你脑子里对“目标格式”和“当前格式”之间差距的判断。先明确自己要什么样的输出,再去选工具、配正则、跑宏,顺序对了,效率自然就上来了。最后再分享一个查完问题后的小技巧:格式化完成之后,打开“视图 → 显示符号”把空格和制表符打开一次,快速扫一遍有没有残留的异常字符,扫完再关掉,这个习惯能帮你少踩很多看不见的坑。
