不能——Sublime原生不支持TODO持久高亮,需自定义语法文件为TODO/FIXME分配独立scope(如comment.todo.js),再在配色方案中为其设置样式,且每种语言均需单独配置。

Sublime 里不用插件,真能高亮 TODO 吗?
不能——至少不能实现「持久、跨文件、主题联动」的高亮。Sublime 的语法高亮系统不识别纯文本关键词,TODO 默认只是普通注释内容,scope 是 comment.line.double-slash.js(或类似),和 // 这是一行注释 完全一样。没有插件或语法层干预,它永远不会变色、加背景、或被主题样式捕获。
为什么 Find All + 正则 (TODO|FIXME) 不算“高亮”?
这只是临时搜索标记,不是语法高亮:
- 关闭查找面板后,高亮立刻消失
- 无法在侧边栏缩略图、文件预览中显示
- 不参与 color scheme 配置,改了主题颜色也影响不到它
- 不支持作用域绑定(比如只在
comment内匹配,避免误中字符串里的"TODO")
你看到的只是 UI 层的荧光笔效果,Sublime 内核根本不知道这个 TODO 有特殊含义。
无插件方案唯一可行路径:覆盖语法定义
必须新建一个自定义语法文件(如 Packages/User/JavaScript-TODO.sublime-syntax),用 match 规则把注释中的 TODO 和 FIXME 提升为独立 scope:
---
%YAML 1.2
...
name: JavaScript with TODO Highlight
file_extensions:
- js
scope: source.js
contexts:
main:
- include: Packages/JavaScript/JavaScript.sublime-syntax
- match: '\b(TODO|FIXME)\b'
scope: comment.todo.js
push:
- meta_scope: comment.todo.js
关键点:
-
\b必须加,防止TODOX或myTODO被误中 -
scope: comment.todo.js要足够具体,且不与原语法冲突 - 必须通过
include复用原 JavaScript 语法,否则会丢掉所有原有高亮 - 保存后需重启 Sublime 或执行
Reload Syntax命令(Ctrl+Shift+P → “Reload Syntax”)
配色方案里怎么让 comment.todo.js 显出来?
打开你的 color scheme 文件(如 Monokai.sublime-color-scheme),在 rules 数组里加一条:
[
{
"scope": "comment.todo.js",
"foreground": "#FF5555",
"font_style": "bold"
}
]注意:
- 别去改
region.yellowish——那是 Highlight 插件用的,原生语法高亮完全不认 - 如果颜色没生效,先确认
Show Scope Name在TODO上是否真显示comment.todo.js - scope 名必须一字不差,大小写、点号、顺序都不能错
这套做法绕开了插件,但代价是:每种语言都要单独写一个语法覆盖文件,且无法动态开关——一旦启用,就永久生效。所谓“轻量”,其实只体现在不装插件;真正的配置复杂度,一点没少。

















