TODO 更安全,因它只匹配独立单词,前后须为非单词字符;需在JSON中写为"\bTODO\b",配合"scope": "comment"防字符串误中,并重载设置生效。

必须用 匹配单词边界,否则 TODO 会连带高亮 TODO_LIST、VALIDATE_TODO 甚至注释里的 todo 小写变体——这不是“高亮不准”,是正则根本没写对。
为什么 TODO 比 TODO 安全?
Sublime 的 Highlight 插件用的是 PCRE 风格正则, 表示单词边界(即字母/数字/下划线与非这些字符之间的位置)。不加 就是纯子串匹配,所有含 TODO 的字符串都会中招。
-
TODO→ 匹配TODO、TODO_LIST、myTODO、"TODO" -
TODO→ 只匹配独立的TODO,前后必须是非单词字符(空格、换行、括号、引号、斜杠等) - 注意:JSON 配置里要写成
"\bTODO\b",因为反斜杠在字符串中需双写
scope 设成 comment 才能防字符串误中
即使正则加了 ,如果 scope 没限定,插件仍可能在字符串字面量里匹配到 TODO。比如 log("TODO: fix this") 里的 TODO 会被高亮——这不是 bug,是你没告诉插件“只在注释里找”。
- 必须设
"scope": "comment",常见值还有comment.line.double-slash(JS/Python)、comment.block(C-style) - 别用
source或留空,那等于全局扫描 - 不确定当前文件注释 scope?按
Ctrl+Shift+P→Developer: Show Scope Name,光标停在// TODO上看状态栏
大小写敏感问题:用 (?i) 还是分开列?
默认正则区分大小写,todo 或 Todo 不会命中 TODO。但直接加 (?i) 有副作用:它会让整个表达式不区分大小写,可能误中 notodo 这类词(因 仍生效,但匹配逻辑变松)。
- 更稳写法:
"\b(TODO|FIXME|todo|fixme)\b",显式枚举,边界控制不变 - 如果项目强制大写,就只留
TODO和FIXME,避免引入小写变体增加维护成本 - 别用
[Tt][Oo][Dd][Oo]——可读性差,且仍可能被ToDo这类驼峰干扰
真正容易被忽略的是:改完配置后,得手动触发一次重载——不是重启 Sublime,而是 Ctrl+Shift+P → Highlight: Reload Settings。否则你改的 \b 和 scope 全都不生效。

















