Highlight插件通过正则匹配文本内容与作用域上下文,5分钟生效,不依赖主题、不修改语法、不卡大文件;需正确配置scope为comment、使用\b单词边界、style设为fill,并验证正则是否命中。

用 Highlight 插件配正则是最稳路径
别折腾语法文件或 color scheme,Highlight 插件直接在渲染层加样式,5 分钟生效,不依赖主题、不修改原语法、不卡大文件。它匹配的是文本内容 + 作用域上下文,不是纯字符串替换。
操作步骤:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Package Control: Install Package,搜Highlight并安装 - 再按
Ctrl+Shift+P,输入Preferences: Highlight Settings – User,打开用户配置 - 填入以下内容(注意 JSON 格式,双反斜杠是必须的):
{
"highlights": [
{
"name": "todo_fixme",
"scope": "comment",
"regex": "\b(TODO|FIXME)\b",
"style": "fill",
"color": "hsl(48, 100%, 85%)"
}
]
}
关键点:scope 必须设为 comment,否则会误中字符串里的 "TODO";\b 是单词边界,防 TODO_LIST 被连带匹配;style 选 fill 比 underline 更易识别。
为什么不能只靠 TodoReview 显示颜色
TodoReview 只负责扫描和列表,它生成的 keyword.other.todo scope 能不能显示颜色,完全取决于当前 color scheme 是否定义了该 scope 的规则。多数轻量主题(如 Default、Adaptive)根本没写这一条,所以你看到的还是默认注释灰。
验证方法:
- 打开
Preferences → Color Scheme,临时换用Monokai或Ayucia,如果 TODO 突然变黄,说明问题出在主题缺失规则,不是插件没起作用 - 不想换主题?那就别指望
TodoReview驱动高亮——它不控制渲染,只提供数据 - 非要硬连,得确保其设置里有
"pattern_names": ["todo"],且patterns正则写对,例如"todo": "(?i)\bTODO\b",否则 scope 根本打不上
正则写错的典型症状和排查法
配完没反应?先看状态栏:把光标停在 TODO 上,如果右下角没显示 regex match,说明正则压根没命中。
常见错误:
- 漏掉双反斜杠:
"TODO"在 JSON 里会被解析成"bTODOb",必须写"\bTODO\b" - scope 错设成
source或留空:会导致匹配进字符串、变量名甚至 JSON key 里 - 用了
.*或.:Sublime 正则引擎不优化回溯,开个 5MB 日志文件就卡死 - 没加行首锚定但想限定注释内:比如
// TODO和/* TODO */共存时,建议用"^\s*//\s+(TODO|FIXME)\b"锁定单行注释场景
自定义语法方案适合什么人
只有当你需要把 TODO 当作语言级关键字(比如让 Ctrl+Click 跳转、或被 LSP 识别),才值得写 .sublime-syntax 文件。它要改作用域链路,涉及 embed、push、pop 规则,且每种语言都得单独配。
举个最小可用例子(JavaScript-TODO.sublime-syntax):
%YAML 1.2
---
name: JavaScript (TODO)
file_extensions:
- js
scope: source.js
contexts:
main:
- include: scope:source.js
- match: '\b(TODO|FIXME)\b'
scope: comment.todo.js
然后还得在 color scheme 里加一条:"scope": "comment.todo.js", "foreground": "hsl(48, 100%, 50%)"。两头都要动,出错难定位——除非你在做团队统一开发规范,否则没必要。
真正容易被忽略的是:scope 名必须严格匹配 color scheme 中的定义,多一个点、少一个后缀都不生效;而且一旦语法文件有 YAML 语法错误,Sublime 会静默降级回用原语法,连报错都不给。











