最稳方式是用Highlight插件配静态规则:设scope为comment、regex为"(TODO|FIXME)"(JSON中双反斜杠)、style选fill,颜色用具体色值如#ffcc00,无需绑定保存事件。

Sublime Text 本身不支持“保存时自动触发高亮”——高亮是显示层行为,不是保存钩子能直接控制的。所谓“保存时高亮 TODO”,实际要解决的是:让 TODO 始终可见、不依赖手动操作、不随文件关闭失效。最稳的方式是用 Highlight 插件配静态规则,而非绑定保存事件。
为什么不能监听 save 事件来高亮?
Sublime 的 API 没有提供“在保存后修改视图高亮状态”的安全接口;强行在 on_post_save 里调用 view.add_regions() 容易冲突、闪烁、漏匹配,且无法跨文件复用。真正的高亮必须走 scope 或插件原生渲染机制,不是靠临时 region。
用 Highlight 插件实现“永久性”TODO 高亮
它不依赖保存动作,只要配置生效,所有已打开/新打开的文件里符合规则的 TODO 就立刻带背景色(或下划线),关掉再重开也不丢。
-
scope必须设为comment:否则会误中字符串字面量(比如"TODO: not a comment") -
regex要加单词边界:"\b(TODO|FIXME)\b"(JSON 里双反斜杠)——防TODO_LIST或TODOX被连带匹配 -
style推荐"fill":比"underline"更醒目,尤其在深色主题下 - 颜色值建议用
hsl()或十六进制:避免和当前主题的comment色冲突,例如"#ffcc00"
配置路径:Preferences → Package Settings → Highlight → Settings - User,填入:
{
"highlights": [
{
"name": "todo-fixme-highlight",
"scope": "comment",
"regex": "\b(TODO|FIXME)\b",
"style": "fill",
"color": "#ffcc00"
}
]
}
TodoReview 能不能替代 Highlight 实现“保存即高亮”?
不能。TodoReview 的核心能力是扫描 + 列表聚合,它的 keyword.other.todo scope 是否显示颜色,完全取决于你当前 .sublime-color-scheme 是否定义了该 scope 的样式。多数轻量主题没定义,所以即使 TodoReview 扫到了,你也看不到高亮。
- 检查方法:光标停在 TODO 上 →
Ctrl+Shift+P→ 输入Developer: Show Scope Name,看是否出现keyword.other.todo - 如果出现了但没颜色,说明是主题缺失规则,不是插件没生效
- 强行改 color scheme 去匹配
keyword.other.todo可行,但不如直接用Highlight简单可靠
别踩的坑:正则写错、scope 选错、颜色被覆盖
常见失效现象:只有部分 TODO 高亮 / 字符串里也被标了 / 颜色太淡看不见。
- 正则没转义:
在 JSON 字符串里必须写成"\b",否则解析失败 - scope 写成
source或留空:会导致匹配到非注释区域,破坏语义 - 颜色值用了主题变量名(如
region.yellowish):Highlight 插件不认这个,只吃具体色值 - 用了
.*或.在大文件里:Sublime 正则引擎不优化回溯,可能卡顿甚至假死
真正需要盯住的,就三件事:scope 对不对、正则边不边界、颜色值是不是实打实的 RGB/HSL。其它都是干扰项。











