不能“一键删除所有注释”,必须分语言、分类型、分步操作:先用/*[\s\S]?*/(启用跨行匹配)删块注释,再用^\s(?://|#).*$删行首注释,每步须Find All并人工抽检三处以上。

不能靠一个正则“一键清空所有注释”,必须分语言、分类型、分步操作,否则 https://api.com#anchor、const r = /a\/b/;、配置项 # default=1 全都会被误删。
先删 /* */ 块注释,必须启用 . matches newline
块注释常跨多行,/\*.*?\*/ 在默认设置下完全失效——因为 . 不匹配换行符,正则只在单行内扫描。唯一可靠写法是 /\*[\s\S]*?\*/:[\s\S] 显式覆盖所有字符(含换行),? 确保非贪婪,避免从第一个 /* 一路吃到文件末尾最后一个 */。
- 操作前务必点击查找面板右下角的
.\n图标启用跨行匹配 - 如果文件语法被设为
Plain Text,/\*[\s\S]*?\*/可能误吞字符串里的"/* in string */";按Ctrl+Shift+P→Set Syntax显式指定语言(如JavaScript、C++) - Python 的三引号文档字符串不是块注释,得单独处理:
"""[\s\S]*?"""或'''[\s\S]*?''' - HTML 要用
<!--[\s\S]*?-->,CSS/JS 中的/* */写法虽同,但语法识别错误时行为不可控
再删 // 和 # 行首注释,锚点比符号更重要
直接搜 //.*$ 或 #.*$ 极其危险:会把 url = "https://a.com#anchor"、http://、正则字面量 /a\/\/b/ 全部干掉。真正安全的是加行首和缩进约束:^\s*(?://|#).*$。
- 这个表达式只匹配行首或缩进后紧跟的注释标记,避开 URL、字符串、正则字面量
- 它不处理行中注释(如
int x = 1; // init),强行删会破坏语句结构;真需要,改用\s+(?://|#).*$并手动逐个确认 - 执行前必须关闭
.\n图标——开启跨行匹配会导致.*$吞掉下一行内容 -
Match case一般不用勾选,注释符号大小写固定,开反而容易漏
每步都必须 Find All 抽检三处以上
即使用了最稳妥的正则,仍可能误删:const r = /a\/b/; 里的 /、JSON 字符串中的 /*、配置文件里带 # default=1 的关键参数。实操强制流程:
-
Ctrl+Shift+F粘贴正则 → 点Find All看高亮是否全为真注释 - 至少抽检开头、中间逻辑块、结尾配置段三处
- 删完立刻
Ctrl+Z回退验证——跳过这步,恢复成本远高于预防时间 - 删完检查文件末尾:若无换行符,Python/Shell 项目可能报错;按
Ctrl+Shift+P→Insert Final Newline补上
真正容易被忽略的是:不同语言的注释边界由语法高亮引擎动态识别,不是正则本身能判断的。你看到的高亮,才是 Sublime “认为”的注释范围——所以 Set Syntax 永远是第一步,不是可选项。

















