Sublime Text 的 .sublime-theme 不支持任何变量语法;所有值必须为 JSON 字面量,如 "[40, 40, 45]",而 "$sidebar_bg" 或 "${colors.sidebar}" 会导致加载失败并回退默认样式。

Sublime Text 里没有“JSON 主题变量”这个概念——theme 文件是纯 JSON 格式,但不支持变量、引用或计算;所谓“配置变量”,实际是误把 color_scheme(配色方案)或用户设置里的动态字段当成了主题可编程部分。
为什么搜不到 theme 中的 $variables 或 {{name}}?
Sublime Text 的 .sublime-theme 是静态 JSON,语法上完全不支持模板变量、环境变量、路径别名或任何形式的插值。所有字段值必须是字面量:"layer0.tint": [40, 40, 45] 可以,"layer0.tint": "$sidebar_bg" 或 "layer0.tint": "${colors.sidebar}" 会直接导致加载失败,控制台报 error loading theme 且 UI 回退到默认样式。
- 不是 Sublime 版本问题——ST3/ST4/ST5 全都不支持
- 不是插件能补救的——Package Control、Theme Engine 等插件均无法注入变量逻辑
- 常见诱因:从 VS Code 主题迁移时习惯性保留
$accentColor写法,或误读了某些文档里的伪代码示例
真正能复用和集中管理的“类变量”只有 color_scheme
如果你想要一套颜色值在多处复用(比如侧边栏背景、状态栏、标签页高亮都用同一深灰),唯一可行路径是:把主色调定义在 .sublime-color-scheme 文件里,再通过 scope 名称间接影响 UI 元素。
-
color_scheme支持"name": "Sidebar background"这类语义化条目,UI theme 中可通过"class": "sidebar_container"+"parents": [{"class": "overlay_control"}]等方式继承其background值(但需主题作者显式支持) - 更可靠的做法:在
.sublime-color-scheme里定义一组命名颜色(如"#2d2d2d"对应"name": "ui.bg.base"),然后手动在.sublime-theme各处粘贴该值——这是目前最稳的“变量模拟” - 别指望
Preferences → Settings - User里的键值能透传进 theme 文件:它只影响编辑器行为,不参与 UI 渲染链
想批量改颜色?用文本替换,别信“变量注入”脚本
当你需要统一调整 UI 主色调,最有效的方式就是打开 Packages/User/MyTheme.sublime-theme,用 Sublime 自带的多行查找替换(Ctrl+H → 勾选 .* 正则)批量替换 RGB 数组或十六进制值。
- 例如把所有
[30, 30, 35]替换为[38, 38, 43],或把"#2b2b2b"替换为"#2d2d2d" - 注意:JSON 中字符串必须用双引号,
'或无引号会破坏语法;替换后务必检查控制台是否报错 - 别运行网上那些声称“自动注入变量”的 Python 构建系统——它们生成的 JSON 很可能含注释或非法字符,Sublime 会静默拒绝加载
真正卡住人的从来不是技术上限,而是“以为有变量机制”这个前提本身。Sublime 的 theme 系统设计就是极简静态结构,接受这点,才能少走三天调试弯路。


















