最直接方法是用正则^[ \t]+批量删除每行行首空格和制表符:启用正则模式后,在Ctrl+H中查找该表达式、替换留空,执行Replace All;操作前需先Find All预览匹配效果,避免误删注释或破坏缩进结构。

用 ^[ \t]+ 正则删行首空格和 Tab 最直接
想快速清掉每行开头的空格或制表符,^[ \t]+ 是最稳妥的正则表达式。它明确匹配行首(^)后一个或多个空格或 Tab([ \t]+),不会误触零长度位置。别用 ^\s*——* 会导致 Sublime 在空行上反复插入新行,越删越多。
操作时必须:
• 勾选右下角 .* 图标启用正则模式
• 先按 Ctrl+F 点 Find All 看高亮是否准确,尤其注意注释行、YAML 键名、Python docstring 是否被波及
• 替换框绝对留空,别填 \n 或空格
• 如果只删空格不碰 Tab,改用 ^ +(末尾带一个空格字符)
删特定前缀(如 //、#)要写死字符
批量删代码注释符号这类固定字符串,不能靠泛化的空白匹配,得把前缀字面量写进正则。比如删每行开头的双斜杠注释,就搜 ^//;删 Python 的井号注释,搜 ^#;删 Markdown 的 > 引用标记,搜 ^> (注意后面有个空格)。
常见坑:
• 没勾 .*,^// 当纯文本处理,完全不生效
• 文件混用缩进(空格+Tab),删完后 IndentationError 报错,说明缩进结构已被破坏
• 搜索时没限定区域,全文件替换把配置项、字符串字面量里的 // 也干掉了
混合缩进文件要先统一再清理
如果删完发现对齐错乱、折叠异常、语法高亮失灵,大概率是原文件同时存在空格和 Tab 缩进。^[ \t]+ 会一视同仁全删,但后续编辑器按视觉列数渲染,实际字符数却对不上。
安全做法是分两步:
• 先菜单 View → Indentation → Convert Indentation to Spaces 统一为纯空格
• 再关掉 Indentation → Detect Indentation,防止下次打开自动切回 Tab
• 最后跑 ^[ \t]+ —— 此时 [ \t] 里其实只剩空格,更可控
删完缩进崩了?重点检查最后一行和 EOF
删完看似正常,但保存后 Python 报错、Git diff 显示大量空格变动、或者行号突然跳变,往往是因为文件末尾没有换行符(EOF 前是空行)。这种行不被 ^[ \t]+ 匹配,但会被编辑器当作“无换行的脏行”特殊处理。
验证方法:
• Ctrl+Shift+P 输入 Insert Final Newline 补一个换行符,再试一次清理
• 打开控制台(View → Show Console),输入 view.substr(view.line(view.size())),返回空字符串 '' 就确认存在 EOF 空行
• 删完务必检查右下角状态栏显示的换行符类型(LF/CRLF),不同项目对换行符敏感度差异很大

















