语法高亮颜色由color_scheme文件控制,需将原配色方案复制到Packages/User/下并显式指定路径;修改时应依据Show Scope Name显示的实际作用域精准匹配rules中的scope字段,确保JSON格式正确、编码为UTF-8。

语法高亮颜色不是由语法文件(.sublime-syntax)控制的,而是由当前启用的 color_scheme(配色方案)决定的。改错地方就永远看不到效果。
怎么确认当前用的是哪个 .sublime-color-scheme 文件
按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Show Scope Name 回车。状态栏会显示当前光标位置的作用域(如 keyword.control),同时右下角也会提示当前 color_scheme 路径,例如:Packages/One Dark Color Scheme/One Dark.sublime-color-scheme。
如果路径里有 Packages/ 但没带 User/,说明你正在编辑只读的原版主题——任何修改都不会生效。
- 必须把原文件复制到
Packages/User/下再改,比如命名为One Dark Custom.sublime-color-scheme - 然后在
Preferences → Settings右侧用户设置中显式指定:"color_scheme": "Packages/User/One Dark Custom.sublime-color-scheme" - 不指定的话,Sublime 默认加载原版,你改的副本等于白做
怎么改 keyword / string / comment 的颜色
打开你复制到 Packages/User/ 下的 .sublime-color-scheme 文件,在 rules 数组里找对应作用域的条目:
-
keyword→ 匹配if、return、class等关键字,scope 通常是keyword或keyword.control -
string→ 匹配双引号/单引号包裹的内容,scope 常为string.quoted.double或string.quoted.single -
comment→ 匹配//或#开头的行,scope 多为comment.line或comment.block
找到后改 "foreground" 字段值即可,推荐用带 alpha 的格式:
{
"name": "Keyword",
"scope": "keyword",
"foreground": "hsla(210, 80%, 60%, 0.9)"
}
避免用纯十六进制如 "#FF0000",它没有透明度控制,容易和背景打架;也别用 rgb(),新版 Sublime 已不支持。
为什么改了 foreground 还是看不出变化
常见原因不是颜色设错了,而是 scope 没匹配上:
- 语法文件(.sublime-syntax)根本没把某段文本标记为
keyword,而是标成了keyword.other或storage.type—— 这时候得去查语法定义,而不是硬改 theme - 作用域层级太深,比如
source.js meta.function.js keyword.control.js,只写keyword.control可能不够,得补全或用更宽泛的keyword - 主题里存在多个同名
"name": "Keyword"条目,后面覆盖前面,删掉重复项或调整顺序 - 用了插件(如 BracketHighlighter)动态注入了更高优先级的 scope,盖掉了你的规则
最稳的验证方式:选中一段文字 → Ctrl+Shift+P → Show Scope Name,看实际打出的作用域链,再照着改 theme 里的 scope 字段。
改完颜色不生效?先检查这三处
很多问题卡在基础路径和格式上:
- 文件保存编码必须是
UTF-8,不能是UTF-8 with BOM,否则解析失败,整个 theme 加载失败,Sublime 会悄悄 fallback 到默认主题 -
.sublime-color-scheme是 JSON 格式,不是 YAML,字段名、引号、逗号一个都不能错;少个逗号,整份文件就无效 - 改完不用重启,但必须确保
color_scheme设置指向的是你刚改的那个文件路径,且路径中没有拼写错误(比如User写成user)
真正难的从来不是“怎么改”,而是“改对哪一层”——语法定义、作用域传播、theme 规则、插件干预,四层叠在一起,漏看一层,颜色就出不来。

















