Sublime中/*.*?*/失效是因.不匹配换行符,需用/*[sS]*?*/并启用.\n选项;且须设对语法模式、抽检匹配、分段处理、关闭跨行删行注释。

为什么/*.*?*/在Sublime里经常失效
因为默认的 . 不匹配换行符,/*.*?*/ 只会在单行内搜索——哪怕注释横跨 5 行,它也只扫第一行就放弃。这不是正则写错了,是 Sublime 的正则引擎默认行为。真正能跨行稳定匹配的写法只有 /*[sS]*?*/:其中 [sS] 显式表示“任意字符(含换行)”,? 确保非贪婪,避免从第一个 /* 一路吃到文件末尾最后一个 */。
必须点亮右下角的 .
图标(即启用 “Dot matches newline”),否则 [sS] 也白搭——这个选项控制的是整个正则上下文是否允许跨行扫描。
- 不点亮
.:多行块注释几乎全漏 - 点亮了但用
/*.**/(无?):可能吞掉中间所有函数、类定义甚至整个配置节 - 点亮了且用
/*[sS]*?*/:才能覆盖真实工程中常见的 2~20 行注释块
删 /* */ 前必须确认语法高亮模式
Sublime 不做语法解析,只按字符串匹配。如果当前文件被设为 Plain Text,那 /*[sS]*?*/ 就会误杀字符串里的内容,比如:const url = "https://api.com?x=/*test*/"; 中的 /*test*/ 会被当成注释删掉。
正确做法是先按 Ctrl+Shift+P → 输入 Set Syntax → 选对应语言(如 JavaScript、C++、CSS)。不同语言的字符串边界识别能力不同,语法模式设对了,Sublime 才能更可靠地跳过引号内的伪注释。
- Python 文件要额外防三引号:得补一条
"""[sS]*?"""和'''[sS]*?''' - HTML 文件必须用
<!--[sS]*?-->,不能复用/* */表达式 - JSON 或 YAML 文件禁用块注释正则——它们本就不该有
/* */,强行跑会破坏结构
执行前不抽检 Find All 就等于没删
再稳妥的正则,也扛不住真实代码里的边界情况:const r = /a/b/; 里的 /、SQL 片段 SELECT * FROM t WHERE c LIKE '%/*%';、配置项 # default=1 都可能被误命中。
实操必须卡死三个动作:粘贴正则 → 点 Find All → 看右下角匹配数 + 手动滚动抽检至少三处(开头、中间逻辑块、结尾配置段)。删完立刻 Ctrl+Z 回退验证——不是为了后悔,而是确认你删掉的确实是注释,而不是某段关键初始化逻辑。
- 匹配数超 500 时建议分段处理,避免一次替换卡死 UI
- 抽检时重点看高亮是否“干净”:有没有 URL、正则字面量、JSON 字符串被连带选中
- 若发现误匹配,别改正则硬刚,先用
Ctrl+Shift+L多光标手动删,更可控
删完块注释后,行注释正则必须关掉 .
块注释删完才能处理行注释,而且这一步必须关闭右下角的 .
图标。因为 ^s*(?://|#).*$ 依赖 $ 锚定行尾,一旦开启跨行匹配,.*$ 可能吞掉下一行内容,尤其在注释后紧跟空行或缩进不一致时。
这个表达式只处理“整行以 // 或 # 开头(允许前面有空格或 Tab)”的情况,不会碰 int x = 1; // init 这类行中注释——想删它就得换 s+(?://|#).* 并逐个确认,否则直接破坏语句结构。
- JavaScript/TypeScript 用
^s*(?://).*$ - Python/Shell 用
^s*#.*$ - 别开
Match Case,注释符号大小写不敏感
真正容易被忽略的是:删完所有注释后,有些语言(如 Python、Shell)要求文件末尾有换行符,而正则替换可能把它一起干掉。得手动检查最后一行是否以
结尾,或者运行 Ctrl+Shift+P → Insert Final Newline 补上。

















