别人问我把 Notepad++ 用在哪,我说得最多的是排版。不是 Word 那种调字号调行距,而是把一坨乱七八糟的数据、日志、代码片段,整理成有规律、能直接用的文本结构。这个活儿如果全靠手工换行、补空格,几千行数据能把人做到眼瞎。Notepad++ 在这类场景里,熟练和不熟练的操作效率可以差出一个数量级——差距不在手速,而在对细节的掌握。这篇我就从最基础的显示设置讲起,一路聊到宏和脚本,把我这些年实际用下来的操作和踩过的坑整理出来。
这篇文章适合谁?经常处理日志、批量改文本、整理接口文档、清洗导出数据的人,以及写代码但不想为大文件开重型编辑器的人。通篇我会按“先知道能做什么,再知道怎么用”的顺序来写,尽量让一个刚接触 Notepad++ 的人也能照着操作。
1. 先搞清楚 Notepad++ 里的“排版”到底指什么
很多人把 Notepad++ 当高级记事本,打开文件看两眼就关掉。但真正让它有价值的地方,是文本的“结构整理”:删除多余空行、合并断裂的行、给每行加统一前缀、把键值对变成 JSON 片段、统一换行符和编码。这些都是排版,只是面对的对象不是纸张,而是数据。
1.1 从“高级记事本”到“排版工具”的认知转变
我刚开始用 Notepad++ 时,也只知道语法高亮和标签页。真正让我转变看法的,是有一次要处理一个从客户系统导出的 CSV 文件。文件里夹杂着大量看不出规律的回车、行尾空格、重复记录,甚至还有几种换行符混用的情况。我用 Excel 打开后字段错位,用记事本打开后一拉到末尾就卡。后来无意间用 Notepad++ 打开了同一份文件,配合它的“显示符号”功能,才发现问题一目了然:行尾有的是 CRLF,有的是 LF,空行里还藏着不可见空格。从那时候起,我就开始把 Notepad++ 当成一个“文本整形工作台”来用。
1.2 排版前建议先打开基础开关
排版的第一步不是动手改,而是先把不可见的东西变可见。这里推荐你先把几个开关打开,不然很多难缠的问题根本看不见。
- 视图 → 显示符号 → 显示空格与制表符:打开之后,空格会变成小点,制表符会变成箭头。混合缩进一眼就能看出来,行尾残留的空格也无处可藏。
- 视图 → 显示符号 → 显示行尾符:能看到每行结尾是 CRLF、LF 还是 CR。很多“看起来没问题但换环境就出错”的文件,都是在这里暴露真相的。
- 设置 → 首选项 → 语言:把 Tab 大小统一设成 4,并勾选“使用空格代替 Tab”。我用这个配置很多年,最大的好处是文件发给别人后,不管对方用什么编辑器,缩进不会悄悄变乱。
- 视图 → 自动换行:这个我只在看长文本时用。注意它只是视觉折行,不会往文件里写入换行符,别把它当成真正的排版。
这四个开关全部打开后,再复杂的文本也相当于在“透视”状态下操作。你马上能看到哪些行尾有空格、哪些空行其实带着空白字符、哪些地方是 Tab 和空格混排。后面所有操作,都是在看清这些细节后才好下手的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 行级整容手术:合并拆分、去重排序的实用套路
文本排版里最常遇到的,就是“行”的问题。PDF 复制过来的文字一行一行断得乱七八糟、导出的名单里有大量重复项、某些配置信息需要把一个字段一行改成一行一条……这些操作都集中在“行操作”上。
2.1 把乱成一片的数据变成一行行规整记录
从网页或 PDF 复制文本时,经常出现一种情况:原本是一段完整的话,被复制成了很多行。手动把每段拼接起来太慢了。
先选中内容,再打开 编辑 → 行操作 → 合并多行,Notepad++ 会把选中的多行合并成一行。这个操作对超过千行的数据也很快,比一个个删回车符强太多。如果合并之后想去掉行与行之间多余的空格,可以接着用一次查找替换:在正则模式下,把 连续多个空格替换成单个空格。
反过来也有需求:某一行内容太长,要按固定分隔符拆开。新版 Notepad++ 行操作菜单里有一个“按分隔符分割行”,输入逗号、分号这类字符即可,操作后每段会独立成行,而且不会破坏长段里的原有内容。如果是旧版本菜单里找不到这个选项,可以直接用查找替换,把分隔符替换成 \n,效果是一样的,只是需要注意将查找模式选为“扩展”。
2.2 合并多行、按分隔符拆分的两个具体案例
为了让你直观感受这两个操作,我举两个真实场景。
场景一:客户发来一个用户名单,每个用户信息占三行,依次是姓名、邮箱、电话。想清理成一行一条记录时,可以先用“按分隔符分割行”把段落切分,或先用正则加逗号,再接“合并多行”。我实际的做法更简单:先把文件里每三行中间的换行符替换为逗号。查找目标写 \r\n,替换目标写逗号——但如果整个文件都是三行一组,那就需要多走两步,先用正则 ^.*$ 去分组。更直接的方案是按住 Alt 键做列选择,把固定的几行选中后通过列编辑补逗号,然后合并多行。
场景二:几百行代码日志,每行日志是一条完整记录,但操作系统日志的异常堆栈把一条记录拆成了多行。处理时不能用“合并多行”直接干,因为会把下一条日志也并进来。正确做法是先把不属于日志开头的行挑出来。用正则替换,查找目标 ^(?!\d{4}-\d{2}-\d{2}),替换为空,这会把非日期起始行的行首内容顶到上一行末尾;随后再对空行和多余空格做清理。
2.3 去重排序:几百行重复数据的清理技巧
几十行数据手动去重还能忍,几百行就必须靠工具了。我可以提供一个很稳妥的菜单方案:编辑 → 行操作 → 移除空行,先把空行清掉;排序则用同一菜单下的“排序(升序)/排序(降序)”。排序之后重复行会挨在一起,肉眼检查后手删也行,但纯靠肉眼在几千行里找重复还是容易漏。
依赖重复删除最精准的方式是脚本。如果你装了 Python Script 插件,选中内容后运行下面这段,它会按整行去重并保留原有顺序:
python复制lines = editor.getSelText().splitlines(True)
seen = set()
out = []
for line in lines:
key = line.strip().lower()
if key not in seen:
seen.add(key)
out.append(line)
editor.replaceSel(''.join(out))
如果没有选中内容,建议把 editor.getSelText() 换成 editor.getText(),从而对全文执行。这个脚本我用了很多次,特点是去重时不改变行的相对顺序,同时忽略每行首尾空格和大小写差异。比起先排序再手动删,它省掉了后续可能重新排序的步骤。
3. 列模式:手工对齐表格和批量补全数据的最好工具
如果说“行操作”是处理大块数据的基础,那“列模式”就是 Notepad++ 里最容易被低估的杀手锏。很多人用了很多年都没意识到,Notepad++ 可以像表格软件那样,同时对一“列”文本进行操作。
3.1 进入列选择模式的两种方式
列模式最大的价值,就是突破“一行一行处理”的思维限制。进入方式很简单:按住 Alt 键,再按住鼠标左键拖动,你会看到不再是连续行选中,而是矩形选区。这种选区可以同时覆盖多行中相同列位置的内容。
另一种方式是键盘操作:把光标定位到起始位置,按住 Shift + Alt,再用方向键移动选择。此方法在笔记本上没有鼠标时尤其好用,可以精准到“从第 5 列到第 12 列”这种范围。
列选建好后,你可以直接输入字符,这些输入会在每一行选中的位置被同时写入;也可以直接按 Delete,把矩形区域内容一次性删掉。我最早用这个功能,是一次性删掉几千行日志前面的时间戳前缀,以前得靠正则,现在按住 Alt 拖一下就行。
3.2 列编辑对话框:批量插入序号和日期
比手动列选更进一步的,是“列编辑”对话框,默认快捷键是 Alt+C。它会弹出一个小面板,可以让你做两类事情:
- 插入文本:可以输入一段固定的文本,比如在选中的每一行前加
TODO:。前提是光标已经在多行选中状态,或者它会对当前光标列向下所有行生效。 - 插入数字序列:从某个起始值开始,按固定步长递增,还能指定每个数字占几位并自动补零。这个非常适合给列表加序号,例如把几百行内容的前面统一加一行数字
001、002……
我做过一个典型操作:一份几百行的待办清单,需要在每行开头插入编号。手动一个个敲到死也未必编得齐,还容易漏。当时我把光标移到第一行行首,按 Alt+C,在列编辑面板里选“数字序列”,起始值填 1,步长填 1,补零位数填 3,确定之后,每行行首就自动出现了从 001 开始递增的编号。整个过程不到五秒。
3.3 一个把日志文本排版成表格的完整过程
举一个更完整例子:你有一段文本,每一行是“文件名 大小 时间”,但中间空隙不统一,看起来很像一堆乱排的字符。使用列模式不能直接填充对齐,因为列式对齐要求各字段长度一致。这时更好的方案是先按连续空格分割,把杂乱的空白替换为统一数量的空格或制表符。
实际操作我会这样做:先用正则查找 [ \t]+,替换为 |(两边加空格的分隔竖线)。这样可以先把字段分离,然后用“分列”的思维检查每一列位置。如果后续需要做成 Markdown 表格,再用列模式给第一行下方补一条分隔行,或用“行操作”里的按分隔符分割行把它拆成表格行。
如果你只需要逻辑上的三维表格,而不需要视觉上的严格对齐,那就更简单:列选操作可以帮你在某一固定位置批量补位。例如每行数据的名称长短不一,但你都希望在第 30 个字符处开始写“单位:万元”,那就把光标移到第 30 列的位置,调用列编辑输入这段文本,所有行无论之前写了什么,都会从第 30 列开始补上同样的内容。这正是列模式相对正则的巨大优势:它不依赖内容匹配,只依赖位置。
4. 正则替换,排版自动化里的核心武器
行和列的操作适合处理规则统一的情况,一旦遇到格式千变万化的数据,就必须请正则表达式出场。很多人一听正则就劝退,其实在排版场景下,只需要掌握少量表达式就能解决大多数问题。
4.1 排版场景里最常用的一组正则清单
下面这组是我在排版场景中使用频率最高的,列表放在这里方便你直接抄。查找替换统一按 Ctrl+H 打开,在“查找模式”里选择“正则表达式”。
| 操作目标 | 查找目标 | 替换目标 |
|---|---|---|
| 删除空行 | ^\s*$ |
留空 |
| 把多个连续空行压缩成一个 | ^\s*$\r?\n |
留空 |
| 删除行尾空格 | [ \t]+$ |
留空 |
| 删除行首行号 | ^\s*\d+[\.、:]\s* |
留空 |
| 给每行加前缀 | ^ |
你要加的内容 |
| 给每行加后缀 | $ |
你要加的内容 |
| 把所有换行符删掉,使全文变成一行 | \r?\n |
留空 |
| 把多个空格合并成一个 | [ \t]{2,} |
单个空格 |
比如最简单的场景:你复制了一段代码,里面全是行尾空格,这些空格在多数编辑器里看不见,却可能在部分环境下造成问题。用上面的第 3 条正则替换为空,一下就干净了。我在排版前经常先跑一遍这个操作,属于热身动作。
4.2 用捕获组重新整理结构:键值对变成 JSON 片段
正则只做删除是浪费,它的真正威力是“结构化重排”。比如下面这段来自旧配置文件的文本:
code复制server.host=example
server.port=8080
app.timeout=30
我想把它变成 JSON 风格:
code复制"server.host": "example",
"server.port": "8080",
"app.timeout": "30"
查找目标写 ^([^=]+)=(.*)$,替换目标写 "\1": "\2"。这里的 \1 和 \2 就代表括号里捕获到的两部分内容。这个操作把“等号左边”和“等号右边”分别提取,再重新拼成带引号的键值对,整个过程是自动化的。
需要注意:如果原始文本里键和值周围有空格,可以在查找里先加上 \s* 来吸收。比如 ^([^=]+)\s*=\s*(.*)$。你会发现捕获组用得越熟练,能做的重排花样就越多。
4.3 正则替换中的一个隐性陷阱:空行与行尾符的匹配
正则替换最大的风险,是匹配结果比你想的更大或更小。空行删除就是一个典型:在某些文件中,一个空行的内容是 \r\n,正则里的 $ 能够匹配行尾位置,但如果我用 ^\s*$ 去匹配,它可以匹配到两个换行符之间看不见的空行,这个没问题,可是如果 \s 自身也包含了 \r\n,就可能出现一个表达式把多个空行连同它们之间的换行符全部吞掉的情形。结果就变成:你以为只删了一个空行,执行后却发现两段文字被拼到一起了。
因此,在使用 \s 时要有意识:它不只匹配空格和制表符,还会匹配换行符。如果你只想处理行内空白,就写成 [ \t],而不是 \s。很多排版事故,都是把这个细节忽略掉之后发生的。
另一个建议是:大规模替换前先用“查找下一个”多看几处,确认命中文本确实是你想改的行。别嫌多操作这一步,在几千行文本上翻车后撤销重来,代价比这大得多。
5. 代码与标记语言排版:内置缩进和格式化插件怎么用
Notepad++ 毕竟是代码编辑器出身,所以“排版”在代码场景里也有另一层含义:缩进对齐,以及把压缩过的 HTML、XML、JSON 展开成可读格式。这块很多人的做法是跑去装各种格式化插件,但我建议先把手动缩进用明白,再上工具。
5.1 最简单的缩进整理技巧:整块平移键 Tab 和 Shift+Tab
在讨论插件之前,你只需要记住两个键:Tab 和 Shift+Tab。选中多行代码,按 Tab 会整体向右缩进一层,按 Shift+Tab 会向左退回一层。这一招在处理大括号没对齐、粘贴进来的代码层次混乱时非常高效。
前提是前文说的缩进设置要正确:在“设置 → 首选项 → 语言”里把 Tab 设为 4 个空格宽,并勾选替换成空格。万一你拿到的是历史遗留文件,里面 Tab 和空格已经混排,可以先全选文本,运行 编辑 → 空白操作 → 将前导空格转为 Tab 或反向操作,先统一缩进字符,再做整体缩进调整。
很多初学者以为格式化只能靠插件,其实对于 Python、C 这类对缩进敏感的代码,先学会整块平移,再手动微调,反而更可控。插件格式化可能把你原本有意的对齐给冲掉。
5.2 插件管理里值得装的格式化插件,以及使用路径
需要真正一键格式化格式时,再考虑插件。新版 Notepad++ 的 插件 → 插件管理(Plugins Admin) 里可以搜索插件,推荐这几个:
| 插件名 | 用途 | 使用路径 |
|---|---|---|
| XML Tools | 格式化 XML,处理部分 HTML | 插件 → XML Tools → Pretty print (XML only with line breaks) |
| JSTool | JSON 格式化和压缩 | 插件 → JSTool → JSON格式化 或 JSFormat |
| TextFX | 老旧但仍有用的字符工具、排序去重 | 插件 → TextFX → TextFX Tools |
以 XML Tools 为例,装好后打开一个压缩成一行的大 XML,按下它的 “Pretty print” 功能,文件就会按层级展开,缩进变得清晰。JSTool 对 JSON 同样如此。格式化后如果发现缩进还是不对,可以再点击一次插件的 “Compact/压缩” 或对比原文手动调整。
时代在变,Notepad++ 中有些老插件长期不更新,在最新版上可能无法安装或直接崩溃。如果你遇到这种情况,第一选择是查看插件管理里是否有维护中的替代品;第二选择是把内容贴到在线格式化工具里处理完毕再贴回来。做后一种处理时,小心不要把网络上有额外要求的内容带进本地环境。
5.3 格式化乱掉之后的修复思路
格式化插件不是万能的,最常见的问题是遇到不合规的文件:XML 标签不闭合、JSON 多了一个逗号、HTML 里嵌套了模板语法,插件往往会直接没反应,或者只格式化了一半,甚至把一个乱糟糟的文件弄得更乱。
我的习惯是格式化前先做两件事:先备份原文件;再把语法检查过一遍,比如对 JSON 文件选择 语言 → J → JSON,让编辑器自动高亮并折叠。这样可以靠编辑器判断括号是否匹配。如果语言菜单里选择了 JSON,而整个文件都有颜色但完全没有按层级折叠,那大概率是某处括号配对出了问题,这时先去查找问题,别急着点格式化。
Markdown 文件也有类似的场景,不过它的排版更多是标题层级和列表符号,这些没有现成格式化按钮,合适的方式是靠宏或脚本统一规范。
6. 排版翻车高发地:编码与换行符
很多人在排版上辛苦半天,最后却被一个看不见的因素坑了:文件字符编码。排好的内容本地看着完全正常,拷给别人或用脚本读取就变成乱码,问题往往出在编码和换行符上。
6.1 乱码问题:先看右下角状态栏再动手
用 Notepad++ 打开文件时,右下角状态栏会显示当前文件的编码和行尾格式。如果你看到的是 UTF-8,那基本是标准格式;如果看到的是 ANSI,并且能正常显示中文,说明它实际上是 GBK 或 GB2312,只是你的系统默认用它来解读了。
之所以强调“先看右下角”,是因为我见过太多人处理乱码时,反反复复点“编码”菜单里的各个选项,来回试,结果越试越乱。正确逻辑不是盲试,而是要判断文件现在的字节内容是什么编码,再进行指定转换。你打开文件后,只要内容显示正常,就说明编辑器已经按正确的编码解读了它,此时你应该做的是“转为”目标编码,而不是换个编码重新打开。
6.2 转换编码的正确顺序,避免中文变成问号或“锟斤拷”
要把一份 GBK 编码的中文文件转成 UTF-8,最稳妥的操作是:
- 用 Notepad++ 打开文件,确认左下角显示 ANSI,且中文正常。
- 点菜单 编码 → 转为 UTF-8 编码。
- 保存文件。
这之后右下角会变成 UTF-8,文件内容中文字符仍然正常。注意不要选“以 UTF-8 编码打开”,那不是转换,而是让
