TODO高亮无效是因为其默认属于comment scope而非独立scope;需先用Highlight插件赋予keyword.other.todo等专属scope,再在color_scheme中针对该scope设置foreground或font_style。

TODO 高亮为什么改了 color_scheme 没反应?
因为默认的 TODO 文本在 Sublime 里只是普通注释,scope 是 comment.line.double-slash 或类似,没被单独标记——你直接在 .sublime-color-scheme 里给 comment 改颜色,会连带把所有 // 注释都变色,不是只动 TODO。
真正生效的路径是:先让 TODO 获得专属 scope(比如 keyword.other.todo),再在配色方案里针对这个 scope 设颜色。否则所有修改都是“广谱染色”,不是精准高亮。
用 Highlight 插件绑定 scope + 填充背景最稳
装好 Highlight 后,在 Preferences → Package Settings → Highlight → Settings - User 里写配置:
{
"highlights": [
{
"name": "todo_highlight",
"scope": "comment",
"regex": "\b(TODO|FIXME)\b",
"style": "fill",
"color": "hsla(48, 100%, 75%, 0.25)"
}
]
}
-
scope必须设为comment:防止匹配到字符串或变量名里(比如"TODO_LIST") -
regex中的\b是双反斜杠:JSON 字符串要转义一次,正则本身还要一次 -
style选fill而非underline:才能实现背景填充,不是下划线 -
color推荐用hsla()格式:第四个参数是透明度,0.25足够醒目又不遮字
想改字体颜色?得靠 scope + color_scheme 双配合
如果只想让 TODO 文字变红、加粗,而不是填背景,就得走语法 scope 路线:
- 先确认
TODO是否已有独立 scope:光标放上去,按Ctrl+Shift+P→ 输入Developer: Show Scope Name,看是否出现类似keyword.other.todo的结果 - 如果没有,得用
Highlight插件配置中加上"on_select": "keyword.other.todo"(部分版本支持),或改用语法覆盖方式生成该 scope - 然后在你自定义的
.sublime-color-scheme文件rules数组里加一条:
{
"name": "TODO keyword",
"scope": "keyword.other.todo",
"foreground": "hsla(0, 100%, 50%, 0.9)",
"font_style": "bold"
}
注意:scope 名必须和 Show Scope Name 显示的**完全一致**,大小写、点号都不能错;font_style 只接受 "bold"、"italic" 或空字符串,不支持 "bold italic" 连写。
背景和字体同时调?小心颜色打架
填背景(fill)和改字体色(foreground)可以共存,但容易互相干扰:
- 如果
fill用了不透明色(alpha=1),而foreground又太浅,文字可能看不见 - 别在同一个
Highlight规则里既设color又指望color_scheme控制字体——Highlight的fill是 layer 级覆盖,会压住底层字体色 - 真要精细控制,建议:背景用
Highlight填,字体色用color_scheme配,且fill的 alpha ≤ 0.3,留出足够对比度
最常被忽略的是 scope 生效链路:regex 匹配 → 赋予 scope → color_scheme 查找并渲染。断在任何一环,看到的都是“没变化”。

















