TODO高亮不生效主因是scope未对齐:文件须被识别为代码(右下角非Plain Text),TODO需位于comment作用域内,Highlight插件regex须用双反斜杠转义并指定"scope":"comment"。

TODO高亮不生效,八成是scope没对上
Sublime 的 TODO 高亮不是靠“搜到就染色”,而是靠语法解析赋予 comment 作用域后,再由 Highlight 插件在该 scope 内匹配正则。如果你的 TODO 写在字符串里(比如 "// TODO: fix this"),或当前文件根本没被识别为代码(右下角显示 Plain Text),那任何正则都白搭。
验证方法:把光标停在 TODO 上,按 Ctrl+Shift+P → 输入 Developer: Show Scope Name,看状态栏末尾是不是以 comment. 开头(如 comment.line.double-slash.js)。如果不是,说明语法没识别,或者它被当成了字符串/普通文本。
- 右下角显示
Plain Text?手动点它 → 选对应语言(如JavaScript) - 文件扩展名冷门(如
.conf、.env)?必须先绑定语法,否则commentscope 根本不出 - 用了自定义语法(如
Packages/User/mylang.sublime-syntax)?确认其中contexts里注释规则已正确定义,且没被更早的match规则吞掉
文件类型没关联,TODO就永远在“隐身模式”
即使 Highlight 插件配置完全正确,如果 Sublime 不知道这个文件是“代码”,就不会走语法解析流程,comment scope 就不会生成,高亮自然失效。这不是插件问题,是编辑器底层机制。
常见冷门后缀(.sh、.conf、.env、.yml)默认可能只被识别为 Plain Text 或错误语法。必须显式绑定:
- 打开一个该类型文件(如
deploy.conf) - 右下角点击当前语法 → 选对的语言(如
Bash或YAML) - 再点菜单
View → Syntax → Open Syntax Specific Preferences → New Override - 在弹出的 JSON 中填:
{"syntax": "Packages/YAML/YAML.sublime-syntax"}(路径需与你选的语法一致)
保存后,所有同后缀文件都会自动应用该语法,comment scope 才会稳定出现。
Highlight 插件的 regex 必须带 和双反斜杠
JSON 配置里写正则不是直接贴 TODO,得考虑字符串转义。写成单反斜杠会解析失败,TODO_LIST 之类也会被误中。
正确写法(注意双反斜杠):
"regex": "\b(TODO|FIXME)\b"
-
scope字段必须设为"comment",不能写"source"或留空,否则会匹配到字符串字面量里 - 别用
^//s+TODO这类强上下文正则——它只适用于特定语言注释格式,跨语言时失效 - 想限定只在行首注释生效?可以,但要配合具体语法的 comment scope,比如
"scope": "comment.line.double-slash.js",而不是笼统的comment
TodoReview 能扫到但不显示颜色?别怪它,怪主题
TodoReview 只负责扫描和列表,它打出来的 keyword.other.todo scope 是否有颜色,完全取决于你当前的 .sublime-color-scheme 文件是否定义了该 scope 的规则。
多数轻量主题(包括默认的 Monokai)根本不认 keyword.other.todo,所以你看到的还是灰色文字。这不是插件 bug,是主题缺失。
- 临时验证:换用
Ayucia或Material Theme,立刻能看到彩色 TODO - 不想换主题?那就别指望 TodoReview 自己画颜色——老实用 Highlight 插件覆盖,它直接控制渲染样式
- 非要走 TodoReview 路线?得在用户设置里补全
"pattern_names": ["todo"],且确保patterns正则能命中(例如"todo": "(?i)\bTODO\b"),否则 scope 根本不打上去
最稳的路径从来都是:装 Highlight,配对 scope 和 regex,颜色当场生效。别在作用域链路里绕弯子,人眼要的是“一眼看见”,不是语法理论正确。











