sublime text原生仅安全清理行尾空格和制表符,启用"trim_trailing_white_space_on_save": true即可保存时自动清理,不删缩进、空行或行中内容;需确保配置在用户设置右侧面板、json格式合法、无更高优先级设置覆盖。

Sublime Text 没有真正意义上的“一键清理冗余代码”功能——所谓“冗余”高度依赖上下文:Python 里多余的 return None 是冗余,但 Go 里显式 return 可能是必需的;YAML 中对齐用的空格不能删,.env 文件里等号两边的空格可能影响解析。原生只做三件安全的事:删行尾空白、删空行、手动触发去重。其他都得靠人判断。
怎么开原生行尾空格自动清理(最常用)
这是你日常编码中唯一该无脑启用的功能,它只动行尾的 和 \t,不动缩进、不碰空行、不改行中内容:
- 打开 Preferences → Settings – User(右侧面板),确保是 JSON 格式合法:用英文双引号,整个内容被
{}包裹,非末项后加逗号 - 加这一行:
"trim_trailing_white_space_on_save": true(注意拼写:是trim_trailing_white_space_on_save,不是triming或trailing_space_on_save) - 值必须是
true(布尔值),不是"true"(字符串会静默失效) - 保存设置文件(
Ctrl+S),无需重启
常见失效原因:项目设置(.sublime-project)或语法专属设置(如 Settings – Syntax Specific)里写了 "trim_trailing_white_space_on_save": false,它会直接覆盖用户设置;右下角显示 text.markdown 时也常被跳过,可临时切为 Plain Text 测试。
怎么一键删所有空行(正则实操)
别信“空行就是没字符”,很多空行实际含 \u200b(零宽空格)、\u00a0(不间断空格)或全角空格 \u3000,原生命令不管这些。必须用正则:
- 按
Ctrl+H(Windows/Linux)或Cmd+H(macOS)打开替换面板 - 勾选
.*(启用正则),**务必关闭**.matches newline(即右下角\n图标不能高亮) - 查找框填:
^\s*$(匹配整行只有空白字符,含、\t、\r、\n) - 替换框留空,点击
Replace All
若粘贴自网页或 Excel,需扩展正则:^[ \t\u00a0\u200b\u3000]*$;删完末尾还剩一个空行?那是 EOF 前无换行符导致的,光标移到最后一行开头,按 Ctrl+Shift+K 干净删除整行。
怎么手动清理重复行(保序去重)
Remove Duplicate Lines 命令只删相邻重复行,对非连续重复完全无效。真要保序去重(比如清理 import 列表),得用预查正则:
- 先统一换行符:File → Line Endings → Unix(避免
^/$锚点错位) - 按
Ctrl+F打开查找面板,勾选Regular Expression和Whole Line,并点亮.matches newline - 查找框填:
^(.*$)\n(?=.*^\1$)(匹配“后面还会出现”的行,首行跳过) - 点
Find All→Ctrl+Shift+L转多光标 →Delete
若匹配失败,大概率是尾部空格干扰:先全局替换 \s+$ 为空,再重跑;大文件(>5 万行)建议切终端用 awk '!seen[$0]++',Sublime 正则引擎会卡死且无法中断。
为什么不要装 TrailingSpaces 类插件
装了 TrailingSpaces 插件又开了原生 trim_trailing_white_space_on_save,两者会冲突:保存时光标乱跳、界面闪一下、甚至重复清理两次。更麻烦的是,某些插件(如 LaTeXTools、MarkdownPreview)在其语法定义里硬编码禁用该行为,你配了全局也没用——得去插件自己的 Package Settings 里手动翻找并改回来。原生功能稳定、轻量、无依赖,够用就别叠 Buff。
真正容易被忽略的是:所有正则操作前,务必确认是否全选(Ctrl+A),否则只作用于当前选区;而“冗余代码”本身没有通用定义,删之前永远先 git diff 或备份,尤其是处理 SQL、YAML、Makefile 这类空格敏感格式。











