Sublime Text 4 唯一官方支持的自定义方式是 Preferences: Customize Color Scheme,它自动生成热重载、不被升级覆盖的 Custom.sublime-color-scheme 文件,仅需在 JSON patch 中增量修改 globals 或 rules(如添加含 "scope": "selection" 的 selection 规则),路径大小写与空格必须完全一致,.tmTheme 已失效。

直接用 Preferences: Customize Color Scheme 生成 Custom.sublime-color-scheme
这是 Sublime Text 4(v4126+)唯一官方支持、热重载、不被升级覆盖的自定义方式。别手写.tmTheme或硬改原始文件——那些在 ST4 里要么静默失效,要么一更新就丢。
按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入 Preferences: Customize Color Scheme 回车。Sublime 会自动在 Packages/User/ 下创建 Custom.sublime-color-scheme 文件,结构是 JSON patch 形式,只填你要改的部分即可生效。
- 改编辑区背景色?加
"globals": {"background": "#E8F5E8"} - 调选中高亮?必须写全
{"name": "Selection", "scope": "selection", "background": "#3a405a"}—— 缺"scope": "selection",Sublime 就回退到默认深蓝 - 想改注释颜色?往
"rules"数组末尾加一条:{"scope": "comment", "foreground": "#5C6370", "fontStyle": "italic"}
为什么改了 background,selection 还是看不清
因为 background 和 selection 是两个完全独立的字段,互不影响。深色背景配默认蓝色选中色,对比度极低;豆沙绿背景配高亮红,又刺眼。必须显式配置 selection 规则。
-
.sublime-color-scheme中,selection必须作为"rules"数组中的一条独立对象,且"scope"值必须是"selection"(不能是"selection.background"或其他变体) - 值支持 RGBA 写法,如
"#3a405a80",但不能写成"#3a405a"+ 单独 alpha 字段 - 如果用了
"selectionForeground",它会覆盖选中文本颜色;不设时,文字沿用globals.foreground
Scope 写对了,颜色还是没变
Sublime 不报错,只是跳过无效 rule。真正起效的是 scope 的匹配精度和加载顺序。
- 用
Ctrl+Shift+P→Developer: Show Scope Name查光标处真实 scope,比如keyword.control.python,不是笼统的keyword - rule 在
"rules"数组里的位置很重要:靠前的 rule 优先匹配,后面同 scope 的会被忽略 - 确保你改的是当前正在用的主题——右下角状态栏显示的配色名,和
Preferences → Color Scheme里选中的必须一致 - 如果 scope 名含语言后缀(如
.python),但文件没被识别为 Python(比如 .pyi 文件默认是 Plain Text),颜色也不会生效;需手动执行View → Syntax → Open all with current extension as…指定语法
别碰 .tmTheme,它在 ST4 里已失效
Sublime Text 4 只加载 .sublime-color-scheme 格式。哪怕你双击打开一个 .tmTheme 文件,右下角显示的路径后缀是 .tmTheme,它也不会被实际应用——复制路径、粘贴进终端检查,后缀不是 .sublime-color-scheme 就等于没加载。
如果你看到主题名后面跟着 .tmTheme,说明你正用着 ST3 兼容模式或旧版主题包。正确做法是:用 Preferences: Customize Color Scheme 生成新文件,或通过 Package Control 安装明确标注支持 ST4 的主题(如 Dracula 官方新版)。
最常被忽略的一点:路径大小写和空格必须完全一致。比如 Packages/Dracula Color Scheme/Dracula.sublime-color-scheme 写成 dracula 或漏掉空格,Sublime 就静默忽略,连 warning 都不给。


















