需先通过Preferences → Color Scheme确认当前.tmTheme文件名,再从Browse Packages…进入User/目录编辑;scope须用Show Scope Name查准,规则按顺序匹配且区分大小写。

如何定位和编辑当前使用的 tmTheme 文件
Sublime Text 的语法高亮由 .tmTheme 文件控制,它不直接关联到某个语言,而是被 color_scheme 设置项引用。先确认你正在用哪个主题:Preferences → Color Scheme,路径末尾的文件名就是目标(比如 Monokai.sublime-color-scheme 或旧版的 Monokai.tmTheme)。
注意:Sublime 3.0+ 默认使用 JSON 格式的 .sublime-color-scheme,但很多老主题或自定义仍沿用 plist 格式的 .tmTheme。二者不能混用——tmTheme 是 XML/PLIST 格式,需用文本编辑器(如 Sublime 自身)打开并手动修改;若你看到的是 JSON 文件,就别去找 .tmTheme。
- 从 Preferences → Browse Packages… 进入用户目录,优先在
User/下新建或覆盖主题,避免改原始包 - 如果想改系统自带主题(如 Monokai),复制其
.tmTheme到User/并重命名,再在 Color Scheme 中选它 - Sublime 启动时只加载一次主题,改完需手动 Preferences → Color Scheme 切换一次才生效,或重启
tmTheme 中 scope 名称怎么查、怎么写才有效
高亮规则靠匹配「scope」生效,而 scope 来自语法定义(.sublime-syntax 或 .tmLanguage)。错误地写 scope 是最常见失效原因——比如想高亮 Python 的类名,写成 entity.name.class 是对的,但写成 class.name 或 entity.class 就不会命中。
查 scope 的方法很简单:Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS)→ 输入 “Show Scope Name”,光标所在位置会弹出完整 scope 链(如 source.python meta.function.python entity.name.function.python)。越靠右的 scope 越具体,优先用最细粒度的那个。
- scope 支持层级匹配:写
entity.name.function会同时匹配entity.name.function.python和entity.name.function.js - 多个 scope 用空格分隔表示「同时满足」,但实际极少这么用;一般单个 scope 就够了
- 不要在 scope 里加
$、^或正则符号——tmTheme 不支持正则,只做前缀匹配 - scope 区分大小写,
keyword.control≠Keyword.Control
添加新高亮规则:颜色、字体样式、背景怎么设
在 .tmTheme 的 内新增一个 块,核心字段是 scope(必填)和 settings(必填)。settings 里可设:
-
foreground:十六进制颜色,如#FF6B6B;支持 alpha(#FF6B6B80),但部分 Sublime 版本不渲染 -
fontStyle:值为bold、italic、underline,或空格分隔组合(如bold italic);normal无效,删掉该字段即可恢复默认 -
background:慎用!大面积设置背景色易遮挡括号高亮、行号等 UI 元素,仅建议用于特殊 token(如 TODO 注释)
示例:让 Python 的 self 变量显示为斜体红色:
scope variable.parameter.self.python settings foreground #E74C3C fontStyle italic
为什么改了没反应?几个硬核排查点
改完 .tmTheme 没效果,大概率不是 Sublime 抽风,而是规则被更早/更具体的 scope 覆盖了,或者语法本身没产出对应 scope。
- 检查 scope 是否真实存在:用
Show Scope Name确认光标处 scope,再比对 rule 中写的 scope 是否完全匹配前缀 - 检查 rule 顺序:
.tmTheme是从上到下匹配,第一个匹配成功的 rule 就生效,后面的同 scope 规则会被忽略 - 确认语法是否加载成功:打开一个文件后,状态栏右下角显示的语法名(如
Python)要点开确认是否是你预期的语法;有时插件会覆盖语法定义,导致 scope 和预期不符 - Sublime 缓存 theme 很顽固,可尝试关闭所有窗口 → 删除
Cache/目录下的Theme - Default相关文件夹 → 重启
scope 链越长越精准,但也越脆弱——换个插件或升级语法包,entity.name.function.python 可能就变成 entity.name.function.py。真正稳定的定制,往往得配合修改语法定义本身,而不是只靠 theme。










