确认TODO是否被正确识别为注释scope:将光标停在TODO上,执行Developer: Show Scope Name,若状态栏显示以comment开头(如comment.line.double-slash.js)则正确,否则不在注释中,Highlight插件也无法高亮。

怎么确认TODO是否被正确识别为注释scope?
Sublime的高亮依赖语法作用域,不是所有带TODO的文本都会被当作待办标记——只有落在comment scope里的才算。比如// TODO: fix login能被识别,但const TODO = 'xxx'或"TODO"字符串里的是string scope,不会触发高亮逻辑。
验证方法很简单:把光标停在TODO上,按Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入并执行Developer: Show Scope Name。看状态栏末尾是不是以comment开头,例如comment.line.double-slash.js或comment.block.python。如果不是,说明它没在注释里,Highlight插件也救不了。
Highlight插件配置里最容易错的三个地方
很多人配完没效果,不是插件没装,而是JSON写法踩了坑:
-
"regex":"(TODO|FIXME)"中的必须写成\b,因为JSON字符串要先转义一次反斜杠 -
"scope":"comment"不能写成"scope":"comment.line"或留空——范围太窄或太宽都会漏匹配 -
"style":"fill"别写成"underline",后者在深色主题下几乎看不见,且不支持颜色填充
正确配置示例(直接复制进Preferences → Package Settings → Highlight → Settings - User):
{
"highlights": [
{
"name": "todo_fixme",
"scope": "comment",
"regex": "\b(TODO|FIXME)\b",
"style": "fill",
"color": "hsl(48, 100%, 85%)"
}
]
}
为什么TodoReview搜得到却高亮不了?
TodoReview只负责扫描和列表,不负责画颜色。它生成的keyword.other.todo scope能不能显示成黄色,全看当前配色方案(.sublime-color-scheme)有没有定义这个scope的颜色规则。
多数轻量主题压根没配keyword.other.todo,所以你看到的还是灰色文字。解决办法只有两个:
- 换一个已内置支持的主题,比如
Monokai或Ayucia(在Preferences → Color Scheme里切换) - 或者干脆不用TodoReview驱动高亮,就用Highlight插件——它绕过theme链路,直接在渲染层填色,更稳
全局检索TODO时跳转错行怎么办?
这不是正则问题,是文件解析失准。常见诱因有:
- 文件含BOM头(尤其Windows下生成的
.ts),用File → Reopen with Encoding → UTF-8重载 - 混用Tab和空格缩进,统一执行
View → Indentation → Convert Indentation to Spaces - 注释格式不规范,比如
//TODO:(缺空格)、/*TODO*/(斜杠紧贴),推荐标准写法:// TODO: xxx
真正影响高亮稳定性的,从来不是正则多复杂,而是scope是否干净、编码是否一致、缩进是否统一——这些细节不处理,再强的插件也白搭。











