sublime text 无真正安全的“一键删注释”功能,需分两步正则替换(先 /*[\s\s]*? */ 删块注释,再 ^\s(?://|#).$ 删行首注释)并人工核验三处以上。

Sublime Text 没有真正安全的“一键删注释”功能,所谓快速清除,本质是两步正则替换 + 人工核验的组合操作;跳过核验或强行套用通用正则,大概率误删 https://、url = "a.com#anchor"、const r = /a\/b/;,甚至配置项 # timeout=30。
先删 /* */ 块注释,必须启用 . matches newline
块注释跨行时,/\*.*?\*/ 默认不匹配换行符,会漏掉绝大多数真实注释。唯一稳定写法是 /\*[\s\S]*?\*/——[\s\S] 显式覆盖所有字符(含换行),? 确保非贪婪,避免从第一个 /* 一路吃到文件末尾最后一个 */。
- 务必点击查找面板右下角
.\n图标启用跨行匹配,否则多行注释几乎全漏 - 别用
/\*.*\*/(无?):它会贪婪吞掉中间所有函数、类甚至整个模块 - 该正则无法识别字符串内的
/*,例如const s = "/* not a comment */";会被误删——这不是正则缺陷,而是 Sublime 不做语法解析 - Python 文件中三引号文档字符串(
"""或''')不会被此正则匹配,需另配"""[\s\S]*?"""并手动确认是否真为 docstring
再删 // 和 # 行首注释,锚定位置最关键
直接搜 //.*$ 或 #.*$ 极其危险:会把 fetch('https://api.com')、url = 'https://a.com//b';、http:// 全部干掉。稳妥做法是加行首和缩进约束:^\s*(?://|#).*$。
-
^和$锚定整行,\s*允许前面有空格或制表符,只命中真注释 - 这一步必须关闭
. matches newline,否则.*$可能跨行吞内容 - 它不处理行中注释(如
int x = 1; // init),强行删会破坏语句结构;若真需要,得改用\s+(?://|#).*$并手动逐个确认 - Python/Shell 配置文件里
# default=1这类关键参数也会被匹配,删前务必抽检结尾配置段
不同语言必须换正则,不能靠一个表达式通吃
Sublime 不感知语法上下文,纯靠字符硬匹配。混用等于主动埋雷。
- HTML 文件必须用
<!--[\s\S]*?-->,否则//会误删内联<script></script>里的 JS 注释 - CSS/JS 的
/* */虽写法一样,但若文件语法被设为Plain Text,Sublime 就无法识别字符串边界,/\*[\s\S]*?\*/可能误吞"/* in string */" - Vue/JSX 单文件组件里,
<script></script>、<style></style>、<template></template>各自遵循不同注释规则,不能用一个正则通吃 - 操作前务必看右下角语言名,或按
Ctrl+Shift+P→Set Syntax显式指定,别依赖自动识别
每步执行前必须 Find All,抽检至少三处
即使用了最稳妥的表达式,仍可能误删:JSON 字符串中的 //、模板字面量里的 #、正则字面量 /a\/b/ 中的 /、配置文件里带 # 的关键参数。
-
Ctrl+Shift+F粘贴正则 → 点Find All看高亮是否全为真注释 - 至少抽检三处:开头(如 license header)、中间逻辑块(如函数体内的注释)、结尾配置段(如
# timeout=30) - 删完立刻
Ctrl+Z回退验证——恢复成本远高于预防时间 - 真正容易被忽略的是:删完后文件末尾可能没换行符,而 Python/Shell 项目常要求 POSIX 兼容,得手动补或运行
Ctrl+Shift+P→Insert Final Newline











