sublime批量删注释必须分步:先用/\*[\s\s]*?\*/(启用“. matches newline”)删块注释,再用^\s*(?://|#).*$(关闭跨行)删行首注释;须按语言设语法、find all抽检三处、验证回退。

Sublime批量删注释不能靠“搜完就替”,必须分类型、开正则、控范围、验结果——直接用//.*或/\*.*\*/大概率误删字符串、正则字面量或 JSON 内容。
删单行注释(//)要锚定行尾,避开代码行内干扰
单行注释容易和代码混在一起,比如const url = "https://a.com?x=1 // not comment";里的//不是注释。安全做法是只匹配「行首/缩进后紧跟//且后面没代码」的行:
- 查找:
^\s*//.*$(^和$需配合(?m)多行模式,或勾选面板左下角↩图标) - 替换:留空
- 关键点:
\s*吃掉前面空白,$确保//占整行末尾,避免吞掉console.log('x') // debug里的// debug - Windows 下
$可能停在\r前,更稳写法是^\s*//.*\R(\R是 Sublime 内置通用换行符)
删块注释(/* */)必须跨行且非贪婪,否则吞掉整个文件
/\*.*\*/在 Sublime 里默认不跨行,且.*是贪婪的,会从第一个/*吃到文件末尾最后一个*/,中间所有函数、配置全被干掉。
- 正确查找:
/\*[sS]*?\*/([sS]显式匹配任意字符含换行,?让*非贪婪) - 前提:必须点击查找面板右下角
.*图标(变蓝),再勾选. matches newline(或按Alt+R后Alt+.) - 别用
(?s)前缀——Sublime 对(?s)支持不稳定,[sS]才是实测可靠的写法 - 删之前先
Find All,抽检三处:开头的 JSDoc、中间的条件说明块、结尾的 TODO 注释,确认高亮没包住const r = /a\/b/;这类正则字面量
删注释前必须设对语法模式,否则误杀字符串
Sublime 不解析语法,只做字符串匹配。如果文件被识别为Plain Text,/\*[sS]*?\*/会把const s = "/* fake */";里的内容也删掉。
- 按
Ctrl+Shift+P→ 输入Set Syntax→ 选对应语言(如JavaScript、C++、CSS) - 不同语言的字符串边界识别能力不同:
JavaScript能跳过双引号/单引号/反引号内的//和/*,Plain Text完全不会 - HTML 文件要用
<!--[sS]*?-->,别复用/\*表达式;JSON/YAML 禁用块注释正则——它们本就不该有/* - Python 文件还得额外加一条
"""[sS]*?"""和'''[sS]*?''',三引号也是注释
删完块注释再处理行注释,且必须关掉跨行选项
块注释删完后,.匹配换行符的选项必须关掉。否则//.*$里的.会跨行吞掉下一行开头,比如把:
if (cond) {
doSomething();
// comment
nextStep();
}
变成:
if (cond) {
doSomething();
<p>nextStep();
}</p>
(// comment\n nextStep();被当一行删了)
- 删块注释时:开
. matches newline - 删行注释时:关掉
. matches newline,只保留(?m)或↩锚点控制 - 执行顺序不能错:块注释 → 保存 → 关跨行 → 行注释 → 再保存
- 删完立刻用原字符串再搜一遍,确认
git diff里没有残留,尤其检查build/、dist/目录是否被意外包含(Where 框里记得加-build/, -dist/)











