Notepad++ 通过勾选「设置 → 首选项 → 新建/保存/载入 → Trim trailing spaces on save」实现保存时自动删除行尾空格和制表符,不处理全角空格、零宽字符、BOM及空行,且仅在保存成功时生效。

保存时自动删行尾空格,靠的是「首选项 → 新建/保存/载入」设置
Notepad++ 本身不提供“保存时自动清理行尾空白”的开关,但可以通过启用 Trim trailing spaces on save 选项实现——它只在你点击「保存」或「另存为」时触发,不会影响编辑过程中的空格,也不动行首和中间空白。
这个选项在 Notepad++ 7.9+ 版本中稳定存在,路径是:设置 → 首选项 → 新建/保存/载入 → Trim trailing spaces on save(勾选即可)。它和菜单命令「编辑 → 行操作 → 删除尾部空白」行为一致:只处理每行末尾的 (空格)和\t(制表符),不碰\r\n、空行、BOM 或 Unicode 零宽字符(如\u200B)。
- 如果勾选后没生效,先检查右下角状态栏是否显示「只读」——只读文件跳过该操作,且无提示
- 该设置对 UTF-8(含 BOM)、GBK、ANSI 编码均有效,但不会清除全角空格(
,U+3000) - 它不依赖正则模式,所以不怕你误切到「扩展」或「普通」搜索模式
- 宏录制、批量打开多个文件时,该选项仍逐个生效——每个保存动作都独立触发清理
为什么不用「保存前运行宏」替代?
有人试图用宏录制「删除尾部空白 + 保存」再绑定到保存快捷键,结果发现:宏回放时若文件被其他程序占用,会静默失败;更麻烦的是,宏无法区分「用户主动保存」和「后台自动保存」(比如插件触发),容易误删或漏删。
Trim trailing spaces on save 是底层原生支持,由编辑器内核在写磁盘前介入,比宏更轻量、更可靠。它不弹窗、不中断、不报错,失败时也仅跳过当前文件,不影响后续操作。
- 宏方案需手动绑定快捷键(如 Ctrl+S),覆盖默认保存逻辑,易引发冲突
- 宏无法感知文件编码变化,而原生选项能自动适配当前文档编码
- 如果你开了「自动备份」,备份文件也会被清理——宏做不到这点
保存时自动清理的限制,必须知道
这个功能不是万能裁刀。它明确不管这些:
-
\u200B(零宽空格)、\u00AD(软连字符)、\u3000(全角空格)等 Unicode 空白字符,统统跳过 - BOM(
\xEF\xBB\xBF)不会被识别或移除,哪怕它紧挨着行尾 - 空行(仅含换行符)保持原样,不参与任何清理
- 如果某行末尾混有空格+制表符+零宽空格,它只清掉前两者,
\u200B会残留
遇到这类混合空白,得切到「替换」窗口,手动执行正则:[ \t\u200B\u00AD]+$(?(勾选「正则表达式」),但务必先 <code>Ctrl+A 全选,否则可能漏行。
批量文件保存时,自动清理会全部生效吗?
会,但前提是每个文件都单独执行了「保存」动作。比如你用文件浏览器(F8)全选 10 个 .conf 文件,右键「在 Notepad++ 中打开」,然后按 Ctrl+Shift+S(全部保存),这时每个文件都会走一遍 Trim trailing spaces on save 流程。
- 如果其中某个文件是只读状态,保存失败,清理也不会发生——它依附于保存成功这一前提
- 「全部保存」不会跳过只读文件报错,而是静默跳过,继续处理下一个
- 未修改过的文件不会触发保存,也就不会触发清理——哪怕它原本就有行尾空格
- 想强制清理所有已打开文件,得先
Ctrl+Tab切到每个标签页,手动按一次Ctrl+S
最稳的做法:先确认所有文件可写,再用「全部保存」;若不确定,就用菜单命令「编辑 → 行操作 → 删除尾部空白」手动扫一遍,再统一保存。


















