不能靠一个正则“精准筛选”删特定注释——sublime 的正则不解析语法,只匹配字符序列;所谓“特定”,必须靠锚点、上下文约束和人工预览来逼近,而不是自动识别语义。

不能靠一个正则“精准筛选”删特定注释——Sublime 的正则不解析语法,只匹配字符序列。所谓“特定”,必须靠锚点、上下文约束和人工预览来逼近,而不是自动识别语义。
怎么只删 // TODO 但保留 // FIXME 和普通注释
Sublime 不支持「保留含某关键词的注释」这种条件替换,只能用负向断言跳过不想删的。例如只删 // TODO,得这样写:
-
// TODO.*$:直接匹配并替换为空(最简单,但会连带删掉整行注释内容) -
// (?!FIXME|XXX).*?$:用负向先行断言跳过// FIXME和// XXX,只命中其他//注释——但注意,它仍会删掉// init这类行尾注释,不是“只删 TODO” - 真正想保留
// FIXME,又只动// TODO,唯一可靠做法是:Ctrl+Shift+F搜// TODO→ 点Find All→ 目视确认每处都是真 TODO → 再Replace All
为什么不能用 //.*TODO.*$ 一类正则“精准定位”
这类写法看似聪明,实则危险:
-
//.*TODO.*$会匹配// some code TODO: fix this,但也可能匹配到const url = "https://api.com?todo=1"; // comment—— 因为.*跨越了字符串边界 - Sublime 不区分字符串字面量和注释,
"// TODO"会被当成真注释删掉 - 若文件里有
/* TODO: refactor */,这个正则完全不生效,得另配块注释规则 - 所有“包含关键词”的正则,都默认把关键词当裸文本处理,没有作用域概念
删版权头(如 /* Copyright 2026 */)但留函数说明
版权注释通常在文件开头、格式固定,可利用位置特征约束:
- 先用
^\s*/\*.*?Copyright.*?\*/\s*$(勾选. matches newline),匹配独占一行或前后仅空格的版权块 - 但别直接
Replace All:有些项目把/* Copyright */和/* @description ... */写在同一块里,正则会一锅端 - 更稳的做法是:
Ctrl+Shift+F搜Copyright→ 在结果列表里右键 →Go to File→ 手动展开上下文看是否纯版权 → 再决定是否删 - 如果版权块总在前 10 行,可先
Ctrl+Shift+P→Select Lines选中第 1–10 行,再在选区内跑正则,避免误触后面文档字符串
最容易被忽略的陷阱:语法模式不对,正则就失效
右下角状态栏显示的语法类型,直接影响你该用哪套正则,也影响高亮准确性:
- 处理
.py文件时,若状态栏显示Plain Text,"""[\s\S]*?"""可能误吞代码;必须先Ctrl+Shift+P→Set Syntax: Python - HTML 文件里混着
<script></script>,<!--[\s\S]*?-->会删掉<!--<script>-->这种旧式包裹,得先手动折叠或删掉 script 块 - JSX 或 Vue 单文件组件,
<!--可能是 HTML 注释,也可能是模板语法的一部分(如<!--{{ visible }}-->),Sublime 无法区分,得按实际项目约定手动判断 - 删完后检查文件末尾有没有换行符——尤其 Python 项目,
Insert Final Newline插件没开的话,最后一行注释删掉后容易变成无换行结尾,CI 可能报 lint 错误











