<p>Sublime Text 无一键清除注释功能,需分两步正则替换并人工核验:先删 / / 块注释(启用 . matches newline,用 /\[\s\S]?\*/),再删 // 和 # 行注释(锚定行尾 $,关闭 . matches newline),不同语言需定制正则,操作前须预览、备份、确认范围。</p>

Sublime Text 没有一键清除注释的功能,所谓“批量去除”本质是两步正则替换 + 人工核验,跳过任何一环都可能把 url = "https://a.com#anchor" 或 const regex = /a\/\/b/ 一起删掉。
先删 /* */ 块注释,必须启用 . matches newline
块注释跨行时,.*? 默认不匹配换行符,直接写 /\*.*?\*/ 会完全不生效或只匹配单行。正确做法是:
- 查找框填:
/\*[\s\S]*?\*/(比.*?更兼容所有 Sublime 版本) - 务必点击右下角
.\n图标开启. matches newline(或按Alt+R切换) - 替换框留空,点
Replace All - 别用
/\*.*\*/——它会从第一个/*一路吃到文件末尾最后一个*/,中间所有代码全被吞掉
再删 // 和 # 行注释,锚定行尾防误伤 URL
顺序不能颠倒:如果先删 //,可能把块注释里的 /* 当普通字符,导致后续块注释匹配失败;而且 // 出现在字符串里(如 "https://api.com#v1")时无法靠正则 100% 规避,只能降低风险:
- 查找框填:
//.*$|#.*$($锚定行尾,避免误删 URL 中的//) - 关闭
. matches newline(否则.*$可能跨行) - 勾选
Regular expression,不勾选Match case(除非你确定大小写敏感) - 替换留空;若想保留原行位置不塌缩,可替换为单个空格,再配合
Trim Trailing White Space on Save
不同语言要分开处理,HTML/CSS/Python 不能共用同一正则
同一个正则在不同语法上下文中表现完全不同:
- HTML 文件里
<!-- -->是注释,但//是 JS 代码的一部分——若文件含内联脚本,//.*$会直接删掉 JS 行 - CSS 里
#fff是颜色值,不是注释,#.*$会误删整行样式 - Python 三引号字符串
"""..."""算文档字符串,不是注释,但正则""".*?"""会把它一起干掉 - Lua 用
--,Shell 用#,JSON 不该有注释但有人手写,删完后 JSON 可能仍非法(因为//后的换行没被清理)
真正容易被忽略的细节:预览、备份、范围控制
很多人输完正则按 Replace All 没反应,其实卡在搜索上下文上:
- 检查右下角状态栏是否意外勾了
In Selection—— 它只在选区内操作,没选中就啥都不做 - 大文件要关掉
Limit search to viewport(视口限制),否则只搜当前可见区域 - 语法高亮插件有时把
//渲染成字符串内容,临时切到Plain Text语法再试 - 复制粘贴正则时,隐藏 Unicode 字符(如
U+200B)会导致匹配失败,建议手动重敲一遍
最麻烦的是混合场景:一行末尾有 foo(); // comment,又紧挨着 /* block */,这种得拆开处理,没法靠一个正则通吃。交付前务必用 Find All 预览所有匹配项,尤其扫一眼 https://、"#、/a\/\/b/ 这类高危位置。


















