sublime text 无真正安全的“一键删注释”功能,需分步正则替换并人工核验:先删 / / 块注释(须启用 . matches newline 并用 /\[\s\s]?\/),再删 // 或 # 行注释(推荐 ^\s(//|#).*$ 锚定整行),不同语言/语法结构须分别处理,删后必须人工抽检。

Sublime Text 没有真正安全的“一键删注释”功能,所谓“一键”只是两步正则替换 + 人工核验的组合操作;跳过核验或强行套用通用正则,大概率误删 URL、字符串、SQL 片段甚至调试逻辑。
先删 /* */ 块注释,必须启用 . matches newline
块注释跨行时,/*.*?*/ 默认不匹配换行符,会漏掉绝大多数真实注释。必须勾选右下角 . matches newline(图标是 .\n)才能生效。
-
Find What填/\*[\s\S]*?\*/:用[\s\S]替代.更可靠,?是非贪婪关键,没它会从第一个/*一路吃到文件末尾最后一个*/ - 该正则无法识别字符串内的
/*,例如const s = "/* not a comment */";会被误删——这不是正则缺陷,而是 Sublime 不做语法解析 - Python 文件中三引号字符串(
"""..."""或'''...''')不会被此正则匹配,需另写"""[\s\S]*?"""并手动确认是否真为 docstring
再删 // 和 # 行内注释,别用 //.*$ 直接全局扫
//.*$ 看似简单,但会误伤 fetch('https://api.com') 或 url = 'https://a.com//b'; // comment → 删完变 url = 'https://a.com',逻辑直接破坏。
- 更稳妥的是只匹配整行注释:
^\s*(//|#).*$,^和$锚定行首行尾,\s*允许前面有空格或制表符 - 若要保留行尾注释(如
int x = 1; // init),就别用这句;想删干净,就得接受风险,并在删前用Find All预览所有匹配项 - JavaScript/TypeScript 中模板字符串里的
//不会被匹配,安全;但正则字面量如/a\/b/里的/可能触发误匹配,无法靠正则规避
不同语言必须分开关联语法类型,不能混用同一正则
HTML 的 <!-- -->、CSS 的 /* */、Lua 的 --[[ ]]-- 结构差异大,且转义和嵌套规则不同。Sublime 不感知上下文,纯靠字符匹配,硬套一个正则等于埋雷。
- 操作前务必按
Ctrl+Shift+P→Set Syntax: JavaScript(或 Python、CSS 等),确保高亮和语义理解一致 - Vue/JSX 单文件组件里,
<script></script>、<style></style>、<template></template>各自遵循不同注释规则,不能用一个正则通吃 - 配置文件(如
.env、nginx.conf)常用#,但删掉# default=1就变成不可逆修改,这类文件建议跳过自动清理
删完必须人工抽检三处,正则再准也替代不了眼睛
真正麻烦的从来不是怎么删,而是删完哪几行该留、哪几行其实藏着调试逻辑——别跳过 eyeball check。
- HTTP URL 含
//的行尾部分,比如const url = 'https://a.com//b'; // comment,删后是否仍合法 - SQL 字符串里含
--(PostgreSQL 风格),Sublime 默认不识别,需额外加--.*$规则且仅限.sql文件启用 - 块注释包裹缩进代码时,
/*\n console.log(1);\n*/替换为空会导致空行塌陷,影响可读性,必要时替换为空格或手动补回缩进











