用 ctrl+shift+p(win/linux)或 cmd+shift+p(macos)执行 developer: show scope name,将光标停在目标词上,查看状态栏末尾显示的 scope 名称(如 storage.type.python),该名称必须与语法定义和配色方案中完全一致。

怎么确认关键字实际对应的 scope 名称
Sublime Text 不认“关键字文本”,只认它被语法赋予的 scope。比如你写的 myfunc 或 TODO,不会自动变成特殊颜色——除非它被语法文件打上了明确的 scope 标签,比如 keyword.control.mylang 或 comment.todo。
必须用 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS)执行 Developer: Show Scope Name,把光标停在目标词上,看状态栏最末尾那个 scope(如 storage.type.python)。只看到 source.python?说明语法规则没命中,得回头检查正则匹配或 file_extensions 是否拼错。
-
scope区分大小写:source.mylang≠source.MYLANG - 别写成
keyword.control这种宽泛值——少一级就匹配失败 - 自定义关键字(如
FIXME)默认属于comment.line,需在语法中用match规则「提升」为独立 scope 才能单独设色
怎么在 .sublime-color-scheme 里加 keyword 颜色规则
配色方案不会自动识别新 scope,必须手动往 "rules" 数组里加对象。确保你编辑的是 Packages/User/xxx.sublime-color-scheme 文件,并且用户设置中已显式指定 "color_scheme": "Packages/User/xxx.sublime-color-scheme"。
示例:给自定义语言的关键字设红色前景
{
"name": "MyLang keyword",
"scope": "keyword.control.mylang",
"foreground": "#FF6B6B"
}
-
scope字段必须和Show Scope Name显示的**完全一致**,包括大小写和点号结构 - 多个 scope 可合并:
"scope": "keyword.control.mylang constant.numeric.mylang" - 不支持通配:
keyword.*.mylang无效 - 如果用了
background,注意别和行高亮(lineHighlight)或选区(selection)颜色冲突,导致文字不可读
为什么改了 color_scheme 关键字还是没变色
失效原因几乎都卡在加载路径或格式细节上,不是逻辑错:
- 文件没放对位置:Sublime 只读
Packages/User/下的.sublime-color-scheme,放错目录(如Packages/Default/)会被忽略 - 用户设置漏了
"color_scheme"行,或路径写成packages/user/xxx(小写、反斜杠、缺Packages/前缀) - JSON 语法错误:多逗号、少引号、BOM 头、注释(JSON 不允许)——Sublime 会静默回退到默认方案(如 Mariana)
- 插件或 project 设置覆盖了全局配色,可临时禁用插件验证
想高亮 TODO/FIXME 这类词该怎么操作
它们天然在注释里,原始 scope 是 comment.line.double-slash 这类通用值,无法单独控制。必须先让语法「认出」它们,再设色:
- 新建覆盖语法文件:
Packages/User/JavaScript-TODO.sublime-syntax - 在
contexts中添加match规则,例如:match: \b(TODO|FIXME)\b,并 assign 新 scope:scope: comment.todo.js - 然后在 color scheme 的
rules里加对应项:"scope": "comment.todo.js" - 别指望靠改注释颜色(
comment)来突出 TODO——它会影响所有注释,失去区分度
真正起作用的永远是「语法生成 scope → 配色方案匹配 scope」这一链路,中间任何一环断掉,颜色就出不来。Scope 名称不准、文件路径不对、JSON 结构不合法——这三个点占了 90% 的调试时间。











