sublime 删除调试残留需用精准正则:console.log、debugger、注释等须锚定行首/完整结构;remove duplicate lines 无法删重复函数,因只比对整行字面量;空行和尾部空白需专用正则清理;大文件应转向 awk 等命令行工具。

Sublime 本身不分析代码语义,所谓“消除冗余代码与废弃函数”只能靠人工定义规则 + 正则精准匹配 —— 直接搜function unusedFoo或console\.log比瞎猜“是不是 dead code”靠谱得多。
怎么安全删掉所有console.log、debugger和注释行
这些不是“冗余代码”的子集,而是明确可识别的调试残留。盲目删整行容易误伤带log的变量名或字符串,必须锚定行首或完整语法结构。
- 删 JS 调试语句:
^[\t ]*console\.log\s*\(.*\);\s*$(注意点号转义、开头空白容忍、分号结尾) - 删
debugger行:^[\t ]*debugger;\s*$ - 删单行注释:
^//.*$(不带换行符,避免吃掉下一行) - 删 Python 注释:
^#.*$;删 HTML 注释需用<!--.*?-->并启用. matches newline - 操作前务必点
Find All确认命中行数 —— 如果某行含console.log但前面有if (DEBUG),它就不该被删
为什么Remove Duplicate Lines不能用来删重复函数声明
它只比对「当前行 == 上一行」,而函数声明通常跨多行、含空格缩进、末尾换行符不一致,根本不会触发判定。
- 例如两处
function foo() {之间差一个空行或缩进差异,就被视为不同行 - 函数体内容不同,仅声明头相同?它完全不关心 —— 它只看整行字面量
- 混用
\r\n和\n时,^/$锚点失效,连“相同行”都匹配不到 - 真要清理重复函数,得先用正则提取所有
function \w+\(.*?\)\s*\{,再导出到外部工具(如awk '!seen[$0]++')做哈希去重
删空行、行尾空格、全角空格这些“视觉冗余”的实操要点
它们不报错也不影响运行,但会干扰 Git diff、增加体积、污染复制粘贴 —— 是最常被忽略的“伪干净”陷阱。
- 删所有“伪空行”(含空格、tab、全角空格
\u3000、零宽空格\u200b):^[ \t\u00a0\u3000\u200b\uFEFF]*$,必须关掉. matches newline - 删行尾空格和 tab:
[ \t]+$(别用\s+$,它会吃掉换行符导致文件末尾异常) - 自动清理开关:
trim_trailing_white_space_on_save设为true,但要注意它会被语法专属设置覆盖(比如text.markdown默认禁用) - 文件末尾残留一个空行?
^\s*$匹配不到,因为 EOF 前没换行符 —— 用Ctrl+Shift+K手动删最后一行更稳
大文件里正则卡死或漏匹配,该切到哪条路
Sublime 的正则引擎在 >5 万行文本中极易假死,且无法中断 —— 此时硬调参数不如换命令行。
- 保序去重(留第一处):
awk '!seen[$0]++',自动兼容混合换行符、忽略 BOM - 归一化后去重(删空格再判重):
awk '{gsub(/^[ \t]+|[ \t]+$/, ""); if (!$0) next} !seen[$0]++' - 忽略大小写:
awk '{low = tolower($0); if (!seen[low]++) print}' - 处理完直接
pbpaste(macOS)或xclip -o(Linux)粘贴回 Sublime,不依赖插件、不卡顿、结果确定
真正容易被跳过的细节是:. matches newline这个开关——它不点,\n就只是普通字符,整个预查逻辑(比如(?=.*^\1$))直接失效;而大文件卡住时,很多人反复改正则,却忘了终端才是更稳的退路。











