直接配"trim_trailing_white_space_on_save": true即可自动删行尾空格和Tab,不碰缩进、空行及行中内容;需确保JSON语法正确、置于{}内、用英文双引号、值为true而非字符串。

如何让保存自动删行尾空格
直接配 trim_trailing_white_space_on_save 就够了,不用插件。它只动每行末尾的空格和 \t,不碰缩进、不删空行、不改行中内容。
打开 Preferences → Settings – User,在右侧 JSON 里加这一行:"trim_trailing_white_space_on_save": true
注意:必须用英文双引号,值是 true(不是字符串),前面已有配置项的话末尾要加逗号,整个内容得被 {} 包住。
- 如果保存后没反应,先看右下角语法类型(比如
source.python或text.markdown)——某些语法专属设置会覆盖全局配置;临时切到Plain Text测试一下 - 装了
TrailingSpaces插件又开了这个选项?两者会冲突,光标乱跳、保存时闪一下,建议关掉插件的自动清理 -
text.markdown里两个空格 + 换行是硬换行,删了就坏格式;source.makefile行尾空格可能参与变量展开,这类文件建议用trim_trailing_white_space_on_save_exclude排除
手动清理行首空格为什么总出错
别用 ^\s*,必须用 ^\s+,否则 Replace All 会插入大量空行。Sublime 的正则引擎对 * 的零宽匹配非常敏感,^\s* 会在每行开头匹配一次“空位置”,一替换就多一行。
正确操作流程:
• 先选中目标区域(比如 Ctrl+L 多行选中,或鼠标拖选)
• Ctrl+H 打开替换面板
• 查找框填 ^\s+,勾选右下角 .*(Regular Expression)
• 替换框绝对留空,别填 \n 或空格
- 如果删完 Python 报
IndentationError,大概率是原文件混用了 Tab 和空格;菜单View → Indentation → Convert Indentation to Spaces统一为纯空格 - 删完发现对齐崩了、折叠错位?检查右下角语法类型,不同语法可能加载不同缩进规则
- 文件末尾那个“看不见的空行”不被
^\s+匹配——因为 Sublime 的^/$默认锚定有换行符的位置,EOF 前无换行符的空行需要单独处理
怎么安全压缩连续空行
别用 ^\s*$ 一键全删——它会吃掉 Markdown 段落间距、Python docstring 里的空行,还漏掉 EOF 前真正没换行符的空行。稳妥做法是先压多留一。
打开 Ctrl+H,勾选 .*,查找框填:\n\s*\n\s*\n+
替换框填:\n\n
点 Replace All,再跑一次确保收敛。
- Windows 文件用 CRLF 换行?把查找式改成
\r?\n\s*\r?\n\s*\r?\n+;右下角状态栏可看当前换行格式 - 大文件(超 5MB)执行
Replace All容易卡死,先Find All看匹配数,超 5000 就分段处理:选中一个函数块 → 勾选In Selection→ 替换 - 批量处理多个文件?别靠 Sublime GUI,终端更稳:
sed -i '/^[[:space:]]*$/d' *.py(macOS/Linux)或 PowerShell:Get-ChildItem *.js | ForEach-Object { (Get-Content $_.FullName) -notmatch '^\s*$' | Set-Content $_.FullName }
快捷键一键清理当前文件行尾空格
不想等保存?用内置命令 trim_trailing_white_space,比正则安全得多。它只删行尾空白,不动缩进、不伤 Markdown 硬换行、不碰空行。
快捷方式:
• Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS)
• 输入 Trim Trailing White Space 回车
- 如果命令没效果,说明当前语法类型被排除(比如
text.markdown),临时切到Plain Text再试 - 想绑定快捷键?打开
Preferences → Key Bindings,在右侧加一行:[{"keys": ["ctrl+alt+t"], "command": "trim_trailing_white_space"}] - 这个命令不会触发保存钩子,也不依赖任何插件,是 Sublime 原生命令,名字不能写错(比如写成
trim_trailing_spaces就无效)
实际清理时最常被忽略的是换行符兼容性——同一项目里混着 LF 和 CRLF,^\s*$ 就会漏匹配;还有文件是否以换行符结尾,直接决定最后一行空行能不能被正则捕获。这些细节不检查,清理结果看起来“差不多”,但 Git diff、CI 构建或协作时容易出问题。










