最稳方案是用正则^[ \t]+删行首空格和Tab,需确保启用正则、禁用. matches newline、替换框留空;删空行用^\s*$但需补EOF换行符;删console.log须先匹配再逐行确认;清控制字符用[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]等正则;最后验证换行符类型并用python -m py_compile检查。

怎么用正则批量删行首空格和 Tab
直接用 ^[ \t]+ 是最稳的方案,它只匹配行首的一个或多个空格或制表符,不会误触中间或行尾。操作前必须确认三点:
• 右下角 .* 图标已点亮(启用正则)
• . matches newline 一定没高亮(否则 ^ 和 $ 行为异常)
• 替换框彻底留空,填一个空格或 \n 都会导致越删越多
如果只想删空格不碰 Tab,用 ^ +(末尾带一个空格字符);若文件混用空格和 Tab 缩进,先执行 View → Indentation → Convert Indentation to Spaces,再跑正则,避免删完缩进错乱。
删空行为什么总漏掉最后一行
^\s*$ 能覆盖真正空行和含全角空格、\u200b、\uFEFF 的“伪空行”,但它的锚定依赖换行符边界。如果文件 EOF 前没有换行符(即最后一行是空但无 \n),这行就不会被匹配。
验证方法:按 Ctrl+Shift+P 输入 Insert Final Newline 补一个换行符,再试一次;或打开控制台输入 view.substr(view.line(view.size())),返回 '' 就说明存在 EOF 空行。
补救快捷键:Ctrl+Shift+K(Windows/Linux)或 Cmd+Shift+K(macOS)定位到该行开头后直接删除,它会自动补上换行符,比 Backspace 安全得多。
删 console.log 为什么不能直接全局替换
因为 console.log 可能出现在字符串、模板字面量、注释、变量名甚至 obj.console.log() 中。直接搜 console\.log 并替换,大概率误杀或破坏语法结构。
安全做法分两步:
• 先用正则 \b(console\.(log|warn|error|info|debug|table)|debugger)\b 配合 Whole Word 和正则模式,点 Find All 生成多光标
• 再按 Ctrl+Shift+P 输入 Expand Selection to Line 把光标扩到整行,逐行检查是否为独立语句(结尾有分号或大括号)、是否在注释/字符串内——只有确认是调试语句才删
千万行文件务必先拆分:split -l 100000 huge.js chunk_,并关闭 SideBarEnhancements、GitGutter 等插件,否则 Sublime 极易卡死。
控制字符导致 Python 报错怎么清干净
\x00、\r(显示为 ^M)、\x0c 这类 C0 控制字符不是“看不见的空格”,而是解释器层面的非法字节,python -m py_compile 会直接报 Non-UTF-8 code starting with '\x00'。
清除步骤:
• 搜 [\x00-\x08\x0b\x0c\x0e-\x1f\x7f](保留 \n 和 \t)删掉大部分控制字符
• 单独搜 \r$ 删行尾残留 \r(尤其 Windows 生成但在 Unix 下运行的文件)
• 终端用 xxd test.py | head -n 5 验证输出里没有 00、孤立 0d 或异常字节序列
预防比清理重要:在用户设置中加 "paste_text_filter": "all",粘贴时自动剥离控制字符。
真正容易被忽略的是:所有正则清理后,得看右下角状态栏显示的换行符类型(LF 还是 CRLF),不同项目对换行符敏感度差异很大;另外,删完别急着运行,先用 python -m py_compile 过一遍,成功才说明字节层真干净了。











