用了很多年的 Notepad++,我最深的体会是:它不是拿来“写”东西的,而是拿来“收拾”东西的。很多人在 Word 或网页后台里把一段文字调了半天,缩进还是乱七八糟,粘贴过来之后中英文混排直接崩掉,其实问题根本不在排版软件,而在于文本本身藏着一堆看不见的空格、Tab 和换行符。这些藏起来的字符才是排版乱的根源。Notepad++ 最值钱的能力,就是把这些不可见字符摊开给你看,然后用各种批量手段一次性收拾干净。
这篇内容不打算讲编程,也不打算报功能菜单,而是按照我平时处理文档的真实顺序来梳理:从“显示字符”开始,到清理空白、列操作、正则替换、行级整理、格式化插件、宏录制,最后是编码和换行的收尾。适合经常处理文本、编辑稿件、整理日志、拼接口数据、做轻量排版的人参考。没有太高门槛,只要愿意打开 Notepad++ 跟着点一遍,很快就能把排版效率拉上一个台阶。
1. 排版前先“开灯”:把空格、Tab、行尾符全显示出来
很多所谓的排版问题,本质上是“看不见”的问题。我处理别人发来的文档时,第一步永远是打开“显示所有字符”功能。这一步就像房间开灯,亮堂了才知道地上有什么。
在 Notepad++ 里,入口在菜单栏的“视图(View)→ 显示符号(Show Symbol)→ 显示所有字符(Show All Characters)”。打开后,普通的半角空格会显示为小圆点,Tab 会显示为向右的箭头,行尾会显示为回车符标记。可能有人觉得这样看起来“脏”,但实际上这才是文本的素颜状态。
1.1 不同空白符混用的第一现场
举个例子:我收到过一份看起来对齐得很好的通讯录文档,复制到 Notepad++ 打开后才发现,每一行前半部分用的是 Tab,后半部分用的是连续空格,而且有时候是 2 个空格、有时候是 4 个空格。这种文档在任何一个所见即所得编辑器里都很难看出问题,因为渲染出来的效果可能差不多。可一旦换一个环境打开,或者需要导入到表格、数据库里,列马上就会错位。
打开了显示符号之后,这种混用一目了然:一行里既有箭头又有圆点。此时要做的就是把它们统一。我的习惯是先把所有 Tab 转成空格,再处理多余的空格,后面会详细讲。这一步千万别跳过,很多“怎么调都对不齐”的玄学问题,最后查出来基本都是缩进符混乱。
1.2 批量设置默认显示状态
一个容易忽略的小细节是:Notepad++ 的新版本里,“显示所有字符”这个选项是跟随当前文件状态的,但有时候打开新文件后又变回默认关掉了。如果想每次打开文件都自动显示空白符,可以到“设置(Settings)→ 首选项(Preferences)→ 视图(View)”里找“显示符号(Show Symbol)”相关的勾选项,把空格、Tab、行尾符默认都打开。
不过也要说实话:对于纯阅读场景,比如快速看一眼日志或代码,全部显示确实有点费眼睛。我会在“需要精调格式”和“只是看一眼”两种状态之间来回切换。熟练之后可以记住快捷键,效率会高很多。
1.3 利用显示功能发现行尾差异
打开行尾符显示后,还会发现另一个常见问题:一份文件里可能混着 Windows 的 CRLF 和 Linux 的 LF。行尾符的显示区别非常细微,但混用会产生很多隐蔽问题。比如同样一段文字,在某些编辑器里换行正常,在另一些编辑器或网页里却会多出空行。
所以建议在排版第一步就顺手统一换行符。这个操作在 Notepad++ 里也很成熟:菜单栏“编辑(Edit)→ 行尾转换(EOL Conversion)”,按你的目标环境选择 Windows、Unix 或 Mac 格式。做技术文档和代码的人通常选 Unix(LF),做 Windows 办公文件的人通常选 Windows(CRLF)。我一般会在所有排版操作结束时再统一一次,防止中间过程又引入了新的换行差异。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 空白字符的统一:行尾空格、全角空格、Tab 转空格
“空白”听起来是最没技术含量的东西,但实际排版里最能拉开效率差距的恰恰是它。行尾多一个空格,平时看不见,发送到某些平台就会变成多余断行或异常缩进;内容里夹着全角空格,去搜索比对的时候就永远匹配不上;Tab 和空格混用,更是代码和配置文件的头号杀手。
2.1 一键去掉行尾空格
处理行尾空格,常规做法是用正则替换,后面会细讲。如果你不想碰正则,Notepad++ 现在也有内置功能:菜单栏“编辑(Edit)→ 空白操作(Blank Operations)→ 修剪行尾空格(Trim Trailing Space)”。这个功能相当于把每一行末尾多余的空格全部清掉。
我自己的习惯是把它设成宏并绑了快捷键。因为每次从网页复制内容、从 PDF 导出文字、从聊天记录里捞文档,几乎不可避免会带进行尾空格。批量处理文本时,顺手清理一次行尾空格,能让后续所有基于行操作的命令稳定很多。
2.2 全角空格与半角空格的归类处理
中文排版里最容易忽略的是全角空格。它和半角空格看起来宽度不同,实际是两个完全不同的字符。全角空格在 ASCII 里不存在,正则表达式中写一个普通空格 [ ] 是匹配不到它的。很多人在 Notepad++ 里做替换,发现明明看到了空格却替换不掉,原因就是没意识到那是全角空格。
处理方式不复杂。如果你想删除所有全角空格,可以先打开“显示所有字符”,把光标放在那个特殊空格后面复制出来,再在“替换(Replace)”的查找框里粘贴进去,替换为空或其他字符。更稳妥的办法是用正则表达式匹配全角空格的 Unicode 字符,例如用 \u3000 这种写法,但 Notepad++ 正则引擎对 Unicode 转义的支持要看版本,所以我更推荐“复制粘贴到查找框”这种笨办法,可靠且不用记写法。
2.3 把连续多个空格压成一个
如果一段文字里混入了密密麻麻的连续空格,要让它恢复可读,可以用正则替换。查找框填 [ ]{2,},替换为单个空格。这里的 {2,} 表示“匹配 2 个或更多个连续空格”。执行之后,整段文字里的空拍就会从“马赛克式”变成正常的词间空格。
这里有一个非常关键的提醒:不要一上来就用这个正则清理全文。因为有些场景下连续空格是有意义的,比如代码缩进、ASCII 表格对齐。所以执行这种替换前,一定要先想清楚当前文件里“连续空格”代表什么。如果只是正文文本,放心清;如果是代码、表格或配置文件,先做针对性选区,或者干脆跳过。
2.4 Tab 与空格统一,避免跨环境错位
处理完空格之后,就该处理 Tab 了。
Tab 的问题在于:不同编辑器、不同配置下,一个 Tab 显示的宽度可能不同。有的编辑器默认一个 Tab 占 4 个空格宽度,有的占 8 个。这也是同一份文档在不同人手里打开后,缩进和对齐完全不一样的根本原因。
在 Notepad++ 里,可以把 Tab 统一转成空格,也可以反过来把空格转成 Tab,看你所在团队或发布平台的规范。入口在“编辑(Edit)→ 空白操作(Blank Operations)”,里面有“空格转 Tab”和“Tab 转空格”。执行前我建议先去“设置(Settings)→ 首选项(Preferences)→ 语言(Language)→ Tab 设置(Tab Settings)”里看一眼当前默认缩进宽度是多少,确认好之后再转换,才不会出现转完之后层次反而乱掉的情况。
统一空白符这件事,表面上是“格式微调”,实际上是在为后边的每一项批量操作铺路。我处理过很多所谓“结构错乱”的数据文件,数了一下原因,超过一半都是缩进符不统一导致的。
3. 列编辑:一次修改一列或 1000 行的“定点打击”
对排版来说,列编辑模式是 Notepad++ 里最值得花时间练熟练的功能。我第一次用的时候很震撼——原来可以像在 Excel 里选中一列那样,在纯文本里框住一块矩形区域,然后整体删除、复制或输入内容。
3.1 进入列选择模式
列选择的触发方式有两种:
- 按住键盘上的
Alt键,同时用鼠标拖拽,选出来的是一个矩形区域。 - 按住
Alt + Shift,再用方向键移动,也能实现同样的矩形选择。
选完之后,你可以直接输入文字,选中的每行相同位置都会同时插入你输入的内容。这个行为在旧版本里被叫做“列模式输入”,实际体验非常接近多行同时编辑。
我在做代码注释、批量拼 Markdown 表格时经常用这个技巧。比如很多行代码后面需要统一加注释标记,不需要一行一行去改,直接按住 Alt 从最后一行代码末尾的同一列开始向下拖选,然后输入 // 或 #,所有选中的行就同时加上了注释符号。
3.2 批量插入递进序号:Column Editor
比纯列操作更进一步的是“列编辑(Column Editor)”功能。入口在“编辑(Edit)→ 列编辑(Column Editor)”,快捷键通常是 Alt + C。
这个功能最有用的地方是批量插入递进数字。比如你要给 300 行文字生成一个有序列表的序号,手工打序号打到手软,用列编辑器可以瞬间完成:
- 把光标放在第一行的起始位置。
- 打开列编辑器,选择“数字(Number)”类型的插入。
- 设置初始值为 1,增量为 1。
- 在“前导零(Leading zeros)”里按需求填位数,如果要生成
001、002,就填 3。
点击确定后,从光标位置往下,每一行都会自动插入一组递进序号。这个方法在做问卷、题目编号、目录草稿时特别高效。
3.3 用列操作快速拼出 Markdown 表格
试想一个场景:你已经拿到一段用空格分隔的 TSV 数据,比如人名和邮箱,想变成 Markdown 表格。常规做法是一个个加竖线,非常痛苦。用列操作会顺畅很多:
先把文字按行放好,第一列是人名,第二列是邮箱。然后把光标放在每行第一个人名结束后的位置,用列选择选中间隔区域,直接输入 |,第一列和第二列之间就有了竖线。接着在每行末尾用列操作补上 |,再在表头下方加一行 |---|---|。整个过程不到半分钟。
这里有个经验:列操作对“行长度一致”的文本最友好。如果每行长短不一,列选择的“矩形”边缘就会落在不同位置,输入内容时只能插到光标所在列,实际效果容易错位。所以做列操作之前,最好先把内容整理成规整的列结构,或者用后面讲的正则把分隔符统一成固定格式。
3.4 列操作容易踩的两个坑
列输入看起来简单,实际用起来有两个坑必须提醒。
第一,如果文件里混用了 Tab 和空格,列选中的列宽看起来整齐,但实际字符宽度不同,插入的位置可能并不在每行期望的语义位置。处理前先统一缩进或分隔符,会安全得多。
第二,列操作只对单字节和双字节字符的分界有时会产生“宽度错觉”。处理中文内容时,如果矩形选区跨越了中文和英文混合的文本,粘贴结果可能错位。我自己碰到这种情况,一般会先把中文行和英文行分开处理,或者改用正则做插入。
4. 正则替换排版:从清理脏文本到批量加结构
如果说列操作是外科手术刀,那正则就是推土机。Notepad++ 的“替换(Replace)”功能支持正则表达式模式,能一次性处理成千上万行的文本。很多人一听正则就觉得难,但其实排版常用的就那么几个套路,掌握了就能覆盖 80% 的日常场景。
4.1 打开正则模式并理解基本写法
在 Notepad++ 中打开“替换(Replace)”对话框后,查找模式默认是“正常(Normal)”,要切换到“正则表达式(Regular expression)”。这时候查找框里的内容就会按正则语法解释。
排版最常用的基础元素:
^匹配一行的开头。$匹配一行的结尾。[ \t]匹配一个空格或一个 Tab 字符。.+匹配一个或多个任意字符(默认不包含换行符)。( )用于分组,分组内容可以在替换区用$1引用。
在替换框里,$1 代表第一个括号匹配到的内容,$2 代表第二个,依次类推。这是正则批量重构文本时最核心的机制。
4.2 去掉从网页复制的 HTML 标签
从网页复制正文时,经常把一堆 HTML 标签也带进来。这些标签以 < 开头、以 > 结尾,处理方式非常简单:
code复制查找:<[^>]+>
替换:(留空)
在正则模式里,[^>] 表示“匹配任何不是 > 的字符”,+ 表示一个或多个,所以 <[^>]+> 就能匹配从 < 到第一个 > 之间的全部标签内容。执行一次替换,正文里的标签就大面积消失了。
但这个正则也有副作用:如果正文里原本就有“小于号”和“大于号”用于比较,比如 a < b,可能被误伤。所以跑这种全量替换前,最好先选区处理,或者先做好备份。
4.3 把连续的多个空行压缩成一个空行
从网页或 PDF 复制出来的文本,经常出现大量连续空行。如果你希望段落之间只保留一个空行,可以用正则压缩。
由于换行符有 Windows(\r\n)和 Unix(\n)两种格式,处理时要先确认文件的行尾格式。如果是 Windows 格式,可以这样写:
code复制查找:\r\n\r\n\r\n+
替换:\r\n\r\n
意思是匹配“至少 3 个换行连在一起”的情况,替换回 2 个换行。如果你的文件是 Unix 格式,就把里面的 \r\n 全改成 \n 再执行。
判断行尾格式最稳的方法还是看状态栏。Notepad++ 右下角会显示当前文档的行尾类型和数据编码,不要凭感觉猜。行尾格式不统一时,正则里写死某一种换行符容易漏匹配。
4.4 给每一行统一加前缀或后缀
给多行文本统一加前缀,除了列输入,也可以用正则。假设要把所有行变成引用格式,就在查找框里写:
code复制查找:^(.+)$
替换:> $1
这里 ^(.+)$ 能匹配一整行内容,$1 在替换框里代表这一行的完整内容,替换后就会在每行前面加上 > 。同理,要给每行加后缀,就把查找写成 ^(.+)$,替换写成 $1; 之类的形式。
这个技巧在整理引用、拼接 SQL 语句、批量为文本加标记时非常实用。需要注意的是,如果文件末尾有空白行或最后一行没有换行符,正则可能不会把它当作“一行”处理。我的习惯是在跑这类替换前,先确认文件最后有一个换行,不然最后一行容易被漏掉。
4.5 清理特定位置的不可见字符
正则还能处理一种很恶心的情况:文本里混入了零宽空格、软连字符等“不可见字符”。这些字符肉眼完全看不见,但会影响搜索、比对和网站显示。
处理方法是先“显示所有字符”,然后选中一个正常的可见字符作为参照,切换到替换框,用“查找下一个”一点一点排查显然不现实。更高效的做法是分段替换:先把最常见的零宽空格字符复制粘贴到查找框,替换为空,再逐个检查。虽然方法“原始”,但在实战中比硬背 Unicode 编码更不容易出错。
用正则做排版,最核心的原则是:先备份,再小范围测试,最后全量执行。千万不要在原始文件上直接跑大正则,尤其是涉及删除操作的表达式。我一般在跑任何替换前都会先 Ctrl + S 存一版,或者直接复制整个文件到一个新标签页里试跑,确认结果没问题后再回原文件操作。
5. 行级整理:排序、去重、拆行与合并的场景实操
文本排版不只是“看得顺眼”,有时候还需要让行与行之间有正确的关系:列表要不要去重、顺序要不要重排、一段被打散的文字要不要重新合并成段。这类行级操作在 Notepad++ 里非常利落。
5.1 排序是阅读结构化文本的利器
你有一份名单或关键词列表,想按字母或拼音顺序排列。全选后进入“编辑(Edit)→ 行操作(Line Operations)→ 排序行(Sort Lines)”,里面通常有“按字典序升序(Ascending)”和“按字典序降序(Descending)”选项。执行后,选中区域内的行会按整行内容排序。
排序对英文、数字开头的行非常有效,比如整理域名列表、产品型号清单、黑白名单。处理中文时,按 Unicode 编码排序和按拼音排序不是一回事。Notepad++ 的默认排序是按编码值排的,如果你需要中文按拼音排序,它不一定能直接满足,这时候可能需要借助 Excel 或其他工具。反过来说,对代码块或十六进制数据,按编码排序反而是稳定的,不会受到拼音习惯干扰。
5.2 去重:连续重复和非连续重复要分开对待
在 Notepad++ 的行操作里,常见的两个功能分别是“移除连续重复行(Remove Consecutive Duplicate Lines)”和“移除重复行(Remove Duplicate Lines)”。看名字可能觉得差不多,实际差别很大。
- 连续重复行去重:只删除紧挨在一起的重复行。如果重复行分散在不同位置,它们不会被删掉。
- 全量去重:把整个文件里所有重复出现的行都处理掉,只保留第一次出现的那一行。
我在整理用户反馈、日志关键词时经常先排序,再做全量去重。先排序的好处是,同样的内容会聚到一起,如果文件较大,肉眼也能快速判断到底有多少重复项。处理完去重之后,一般还会顺手做一次行排序,让输出结果保持整齐。
但必须小心:不是所有场景都适合去重。比如某些配置文件中,多行内容相同但含义不同,一旦去重就直接破坏语义。所以去重前先想清楚,这个文件的重复行是否真的可以安全删除。
5.3 把被打散的行重新合并成段
有时候从 PDF 复制出来的文字,每一行都是“物理换行”,但语义上是一段连续的话。要把这些行合并回去,我一般用正则而不是直接调用“合并行(Join Lines)”。
如果文件里段落之间用空行分隔,那可以把“非空行末尾的换行”替换成空格:
code复制查找:(\S)\r?\n(\S)
替换:$1 $2
这个表达式的含义是:在“非空白字符 + 换行符 + 非空白字符”之间,把换行替换成空格。简单说,就是让行与行之间用空格连起来。因为空行前后没有“非空白字符”,所以空行会被保留,正好能维持段落结构。
执行前同样先确认行尾格式。我最常见的一个失误就是把 \r?\n 写错成 \n,结果在 Windows 格式文件上出现了残留字符。现在我的习惯是:先查看右下角行尾类型,再决定正则里怎么写换行符,或者在查找框里直接把原来的换行复制进去。
5.4 按分隔符拆行,也是排版的一种
与合并相反,拆行需求也很多。比如你有 张三,25,北京 这种逗号分隔数据,想让每一项各占一行,可以用正则把分隔符替换成换行。
在替换框里输入真实的换行符,不同方式效果不同。更直观的方法是先用查找匹配到分隔符,然后在替换框里切换成“转义序列(Escape sequence)”模式,填入 \n。需要注意,转义序列模式下的 \n 不一定等于当前文件的换行格式,替换之后最好再统一一次行尾格式。
拆行操作的实际场景:把 CSV 字段强行摊开成逐行清单、把 key=value 的配置改成易于 diff 的多行结构。这些操作做完之后,通常会配合后面的“插件格式化”再做一次代码级整理。
6. 格式化插件:XML、JSON、导出高亮时的选择
文本排版做到这里,纯手工技巧已经够日常使用了。但如果你经常处理 XML、JSON、SQL 这类“有结构的文本”,只靠手工缩进就太慢了。很多人不知道,Notepad++ 里其实自带插件管理,可以快速安装格式化工具。
6.1 XML Tools:再乱的 XML 也能瞬间变整齐
我见过太多被压缩成“一行长龙”的 XML 文件,手工去缩进根本不现实。这种时候打开“插件(Plugins)→ Plugins Admin(插件管理)”,搜索安装 XML Tools。装好后,把光标放在 XML 内容里,执行“XML Tools → Pretty print(美化打印)”,整个文档立刻按层级展开成缩进良好的结构。
这里有一个细节:XML 美化器对“单根节点”和文档前有没有 XML 声明非常敏感。如果文件开头有多余文本、注释或者不是合法 XML,美化可能会失败。遇到这种情况,先把非法部分临时剪切到另一个标签页,美化完成后再贴回来,比自己手工修速度快很多。
6.2 JSON 格式化的两条路线
JSON 也是排版重灾区。接口返回的 JSON 经常被压缩成一行,直接看根本没法排查字段归属。
格式化 JSON 我一般用 JSTool 插件里的 JSFormat,或者用插件市场里专门的 JSON 格式化工具。操作方法:选中所有 JSON 文本,执行格式化命令即可。格式化失败的常见原因是 JSON 里有注释或末尾多了逗号,这类内容不属于标准 JSON,工具解析不了。我处理时会把注释先临时替换掉,格式化完成后再补回去。
6.3 不用为了好看去手动缩进:开发语言的格式化思路
如果面对的是 Python、C++、Java 这类代码,Notepad++ 没有像 IDE 那么完备的自动格式化能力,但有两点可以帮助排版:
- 用“编辑(Edit)→ 注释(Comment)→ 切换行注释(Toggle Line Comment)”快速对选中代码批量添加或取消注释。
- 用“设置 → 首选项 → 语言 → Tab 设置”里的“缩进宽度”统一代码缩进。
如果代码本身需要完整的语法级格式化,我的建议是交给对应语言的专用工具来跑,不要指望 Notepad++ 全包。它更适合做“文本层级”的快速整理,而不是编译级分析。
6.4 NppExport:把带格式文本导出成 HTML 和 RTF
还有一个很冷门但有用的场景:你在 Notepad++ 里写了一段带语法高亮的代码,想贴到面前台页面或 Word 文档里,但普通复制会丢失颜色和格式。这时可以安装 NppExport 插件,利用它的“导出为 HTML”或“导出为 RTF”功能,把高亮结果保留下来。导出后,HTML 可以继续在网页里加工,RTF 可以直接在 Word 中打开。
坦白讲,这个功能在 Markdown 和代码渲染已经很普及的今天用得少了,但在写纸质材料、做离线文档时仍然能救命。需要注意的是,导出大文件时生成的 HTML 体积会明显膨胀,最好只导出需要展示的区域,而不是整个文件。
7. 用宏消灭重复排版动作
如果你每天都要处理同一类排版任务——比如清理从某个系统导出的脏数据、给一类代码文件批量加头部注释、统一某种文件的行尾格式——那一定要用宏。宏相当于把你在 Notepad++ 里做过的一连串操作录下来,下次一键重放。
7.1 录制一次你最常做的排版动作
宏录制入口在“宏(Macro)→ 开始录制(Start Recording)”。此时你在 Notepad++ 里的每一步操作都会被记录。做完一系列排版后,点击“宏 → 停止录制(Stop Recording)”,然后给这段宏命名并保存。
以我自己的实际场景为例:我经常要清理一类“每行末尾有空格、段落之间空行太多”的文档。我把“去行尾空格”和“压缩连续空行”录成了一个宏,命名叫“CleanText”。以后收到这类文档,直接打开,运行这个宏,两步到位。
7.2 宏只能录制操作,不能替你思考
第一次用宏的人很容易踩一个坑:录制的时候是在“选定了内容”的状态下执行的,重放时如果没选中对应内容,宏就会跑偏。宏不理解“语义”,只记住“坐标”和“操作”。比如录制时你从第 10 行开始操作,重放时它仍然会尝试从第 10 行开始,而不是“从当前光标位置开始”。
因此,录制宏时最好设计成“从文件开头开始操作”或者“只对全选内容操作”的形式,这样重放时才更稳定。像替换类操作,如果录制时弹出过确认对话框,重放时也可能卡在对话框等人工确认。我一般会把宏设计成不弹窗的操作组合,比如纯“替换全部”或纯列编辑,这样运行起来才顺畅。
7.3 把常用宏绑定到快捷键
保存好的宏可以在“宏 → 修改快捷键(Modify Shortcut)”里绑定一个快捷键。比如我把“CleanText”绑定成了 Ctrl + Alt + C,碰到需要清理的文档,先全选,再按一下快捷键,剩余工作就交给宏了。
设置快捷键的时候注意不要和 Notepad++ 自带的快捷键冲突。绑定完一定要重启一次编辑器再测试,有些版本对快捷键映射的刷新不是实时的。
7.4 宏录制解决不了的,用脚本插件补位
如果排版逻辑涉及条件判断——比如“如果行首是数字就删掉”“如果行尾有特定字符串就把它替换成另一种”——宏就力不从心了。这类需求可以用 Python Script 插件来写脚本处理,但插件的安装和配置相对复杂。我的建议是,别一上来就追求脚本化。先用正则和行操作把 80% 的重复任务解决掉,真的有高频且复杂到没法手工完成的需求时,再考虑脚本。
8. 保存前的最后三查:编码、换行符、备份
排版动作做完了,不等于万事大吉。我见过不少人在 Notepad++ 里把文本调整得很漂亮,结果保存时选错编码或混了换行符,文件交出去之后在别人电脑上打开就乱码。排版收尾阶段的细节,往往比前面所有技巧都更影响交付质量。
8.1 编码不是“看着正常”就够了
Notepad++ 右下角会显示当前文件的编码,比如 UTF-8、UTF-8 BOM、ANSI 等。中文内容最安全的选择是 UTF-8。如果你打开一个文件时发现中文乱码,多半是文件本身是别的编码,而 Notepad++ 没正确识别。
这时候不要去“另存为 UTF-8”,而要先通过“编码(Encoding)→ 字符编码(Character Set)”尝试选择正确的原始编码,让文字恢复可读后,再通过“编码 → 转为 UTF-8”进行转换。这个顺序非常关键。如果顺序反了,等于在乱码基础上强行改编码,只会把文件彻底弄坏。
8.2 文件里混用换行符比想象中更常见
换行符的问题在前面提过,这里再强调一次收尾阶段的检查。多平台文件合并、网页抓取、不同编辑器的自动转换,都可能让一个文件里同时存在 LF 和 CRLF。最稳妥的做法是:在收尾时用“编辑 → 行尾转换”手动指定一种格式。你不需要记某一行是哪种,Notepad++ 的转换命令是整文件统一处理的。
8.3 正则和宏操作前,先保留原始备份
最后一条,也是最值钱的教训:在做任何大规模正则替换、宏批量处理、格式化插件美化之前,一定先保存一版原始文件,或者用“文件 → 另存为”把原始版本备份成 .bak。
有人会觉得这很啰嗦,但排版本质上是“破坏性重构”,有些替换是不可逆的。实际操作中我就吃过亏:有一次对一份数据文件跑了个看似无害的“清理行尾空格”正则,结果误伤了本来就该保留的对齐空格,等发现时已经保存过了。从那以后,我的工作习惯变成了:每个新任务都在 Notepad++ 里先复制出一个新标签页做“试验田”,测试无误之后,才在原始文件上操作。
排版这种事,往往不是比谁操作得多,而是比谁能够用更少的动作、更低的出错概率完成交付。Notepad++ 给我的最大帮助就是:它把文本里一切不透明的地方变透明,把一切重复的动作变成可复用。你在里面花时间练的这些“小技巧”,最终都会变成处理信息速度上的巨大差距。我自己到今天还保持着“先开显示字符、再动批量替换”的习惯,也建议你可以从这一步开始试试。
