要使 TODO 高亮生效,必须先通过自定义语法(如 JavaScript-TODO.sublime-syntax)为其赋予明确 scope(如 keyword.other.todo),再在配色方案 rules 中精确匹配该 scope 并设置样式,最后手动刷新配色方案。

不能直接在配色方案里写“TODO”就变色——Sublime 的 .sublime-color-scheme 文件只认 scope,不认文本内容。 想让 TODO 高亮生效,必须先让它被语法系统识别为一个有明确 scope 的 token,再在 color scheme 中匹配该 scope。否则改再多颜色规则都没用。
查不到 TODO 的 scope?说明它根本没被语法标记
把光标停在 TODO 上,按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入并执行 Developer: Show Scope Name。如果状态栏只显示类似 comment.line.double-slash.js 这种通用注释 scope,而没有 keyword.other.todo 或 comment.todo 这类专属 scope,那就意味着:当前语法文件压根没给 TODO 特殊对待。
- 别去改
JavaScript.sublime-syntax原文件——升级会覆盖,且容易出错 - 正确做法是新建一个覆盖语法(如
Packages/User/JavaScript-TODO.sublime-syntax),用match规则把TODO提升为独立 scope - scope 名建议用标准前缀,比如
keyword.other.todo,方便后续主题复用
在 color scheme 里加 rule,但 scope 必须和语法里的一致
打开你当前使用的配色方案文件(通常是 Packages/Color Scheme - Default/Monokai.sublime-color-scheme 或用户自定义路径),在 rules 数组里追加一项:
{
"scope": "keyword.other.todo",
"foreground": "#FFD700",
"font_style": "bold"
}
-
"scope"值必须和你语法文件里match规则输出的完全一致(大小写、点号、顺序都不能错) - 别用
"name": "TODO"这类无效字段——color scheme 不解析文本名 - 如果想同时高亮
FIXME,语法里得一起 match,并共用同一个 scope,或另配一条 rule
用 Highlight 插件绕过语法改造,但 scope 仍要设对
如果你不想碰语法文件,Highlight 插件是最简路径。但它不是“随便写个正则就高亮”,关键仍在 scope 绑定:
- 配置中
"scope": "comment"是底线要求——防止匹配到字符串里(比如"TODO: fix this") - 正则必须带单词边界:
"\b(TODO|FIXME)\b"(JSON 里双反斜杠) - 插件赋予的 scope(如
keyword.other.todo)必须和 color scheme 里 rule 的"scope"字段严格对应 - 颜色由
"color"控制,但若主题已定义了该 scope,插件的 color 会被忽略——优先级:color scheme > 插件 inline color
最常被忽略的一点:改完 color scheme 或语法文件后,Sublime 不会自动重载——必须手动触发 Ctrl+Shift+P → UI: Refresh Color Scheme,否则永远看不到效果。

















