TodoReview是ST4兼容的TODO高亮现代方案,需手动刷新语法定义、确保文件有正确语法上下文、配置todo_review_patterns匹配规则,并在color_scheme中定义keyword.todo作用域样式。

Sublime 安装 TODO 高亮插件报错,90% 不是插件本身的问题,而是你试图用 Package Control 直接搜 “TODO” 或 “TodoHighlight” 并安装——它要么不存在,要么已废弃,要么和当前 Sublime Text 4 / new syntax engine 不兼容。
为什么 TodoHighlight 插件装不上或报错?
老版 TodoHighlight(作者 npeirson)依赖已淘汰的 .tmLanguage 语法引擎,在 Sublime Text ≥3176(尤其是 ST4)中无法加载,控制台常报:
error: Unable to parse syntax file "Packages/TodoHighlight/TodoHighlight.tmLanguage"
这不是你网络或权限问题,是语法定义格式过时。官方 Package Control 里搜到的同名包,多数是未更新的 fork 或空壳。
- 真正能用的现代方案是
TodoReview(推荐)或SublimeLinter-contrib-todo(需搭配 SublimeLinter) -
TodoReview自带.sublime-syntax支持,无需额外配置即可识别TODO、FIXME、NOTE等关键词 - 别装
TodoHighlight+TodoList组合——两者冲突,且后者在 ST4 中根本不会出现在View → Syntax菜单里
TodoReview 安装后不显示高亮?检查这三处
装完 TodoReview 后右下角没变、关键词还是灰色,常见卡点:
- 没执行
Ctrl+Shift+P→Reload Syntax Definitions:新语法包必须手动刷新索引才生效,重启 Sublime 不顶用 - 文件当前语法被设为
Plain Text:TodoReview 只在有语法上下文的文件中工作(比如.js文件识别为JavaScript),如果右下角是Plain Text,它压根不启动 -
todo_review_patterns设置被覆盖:默认只匹配大写TODO,若你用// todo:或# fixme,需在用户设置里加:
{
"todo_review_patterns": {
"TODO": ["TODO", "todo", "Todo"],
"FIXME": ["FIXME", "fixme", "Fixme"],
"NOTE": ["NOTE", "note"]
}
}
高亮颜色太淡或根本看不见?别改插件,改 color_scheme
TodoReview 本身不定义颜色,它只是给匹配文本打上 keyword.todo 这类 scope;最终显色靠你当前的配色方案。如果 TODO 看起来像普通注释或完全透明,说明主题没定义这个 scope。
- 光标停在
TODO上,按Ctrl+Shift+P输入Inspect Scope,确认输出含keyword.todo - 打开当前
color_scheme文件(路径见Preferences → Color Scheme),搜索keyword.todo - 若没找到,就在
"rules"数组末尾加一条:
{"scope": "keyword.todo", "foreground": "#FF5555", "font_style": "bold"}
注意:color_scheme 必须是 .sublime-color-scheme 格式(ST4 默认),老式 .tmTheme 不支持 keyword.todo —— 换成 Monokai 或 Nord 主题可快速验证是否主题问题。
想让非标准文件(如 .env、.yml)也支持 TODO 高亮?
TodoReview 默认只在 Sublime 已识别语法的文件中运行,而 .env 常被识别为 Plain Text,.yml 可能被误判为 YAML (JSON)(不触发 todo 扫描)。解决方法很轻量:
- 对
.env类文件:在首行加# @language=shellscript或# @language=yaml,再执行一次Set Syntax:,强制赋予语法上下文 - 对
.yml文件:先手动设为YAML(不是YAML (JSON)),再运行TodoReview: Refresh - 别依赖
ignored_packages里删掉 YAML —— 那会导致整个 YAML 高亮崩溃,得不偿失
真正容易被忽略的是:TodoReview 的扫描逻辑绑定在「语法解析器」上,不是文件路径或内容正则;没语法,就等于没入口——所以一切都要从右下角那个小小的 Plain Text 开始。











