sublime中git差异高亮颜色由配色方案的diff相关scope控制,需在custom.sublime-color-scheme中添加markup.inserted.diff、markup.deleted.diff、markup.changed.diff规则并设十六进制foreground值。

怎么改 Git 差异高亮(diff)的颜色
Sublime 里 Git 差异标记(如 git add -p 后的 hunk、或使用 GitGutter/Anaconda 等插件显示的 +\- 行)的颜色,**不由语法高亮 scope 控制,而是由配色方案中 diff 相关的 scope 规则决定**。常见错误是去搜 comment 或 string,完全不相关。
实操建议:
- 打开菜单 Preferences → Customize Color Scheme(这是最安全路径,自动创建并打开
Packages/User/Custom.sublime-color-scheme) - 在打开的 JSON 文件中,找到或新增
"rules"数组下的 rule,添加如下结构:
{
"scope": "markup.inserted.diff",
"foreground": "#4ec9b0"
},
{
"scope": "markup.deleted.diff",
"foreground": "#f44747"
},
{
"scope": "markup.changed.diff",
"foreground": "#c586c0"
}
这些作用域对应 Git diff 中的插入、删除、修改行。颜色值必须是十六进制(如 "#4ec9b0"),不能用英文名或 rgb()。
为什么改了还是看不到差异标记
不是配色没生效,而是你根本没启用差异标记功能——Sublime 默认不显示 Git diff 高亮,它依赖插件或外部集成。
常见原因和应对:
-
GitGutter插件未安装或未启用:按Ctrl+Shift+P输入GitGutter: Toggle看是否能触发;检查插件设置里"enable": true - 文件未被 Git 跟踪:
git status显示untracked时,GitGutter 不会渲染差异 - 作用域名拼错:比如写成
diff.inserted(错)而非markup.inserted.diff(对)。可用Ctrl+Shift+P → Developer: Show Scope Name把光标放在带 + 的行上确认真实 scope - 插件用了自定义 scope:某些 Git 插件(如
SublimeGit)可能用sublimegit.diff.added这类非标准 scope,需查该插件文档
如何区分“当前编辑区修改”和“Git diff 标记”的颜色
很多人混淆了两个概念:选中文字的背景色(selection)、Git 变更行标记色(markup.*.diff)和同词高亮色(highlight)。它们互不影响,但容易一起调错。
关键区别:
-
"scope": "selection"控制你鼠标拖选那块背景,修改它的background(如"#264f7880") -
"scope": "markup.inserted.diff"控制左侧 gutter 里的绿色 + 和行内插入文本的前景色(foreground) -
"scope": "highlight"控制双击单词后其他相同词的背景高亮,要调它得改background,不是foreground
改错 scope 会导致:改了 selection 却以为是在调 diff,结果左侧 + 变色了但行内没反应——因为 + 是 foreground,而行内插入文本默认继承该 scope 的 foreground,不是 background。
要不要改 .tmTheme 还是 .sublime-color-scheme
优先用 .sublime-color-scheme(JSON 格式),别碰 .tmTheme(XML 格式)。
原因很实际:
-
Preferences → Customize Color Scheme自动生成的Custom.sublime-color-scheme是 Sublime 官方推荐路径,升级不覆盖 -
.tmTheme文件里没有markup.*.diff这类 scope 的默认 rule,得手动加整个<dict></dict>块,XML 容易括号/引号错位导致主题加载失败 - 所有现代插件(GitGutter、SublimeLinter、BracketHighlighter)输出的 scope 都是为 JSON 格式 color scheme 设计的,匹配更稳定
真正容易被忽略的是:改完保存后,如果颜色没变,第一反应不该是重装插件,而是打开控制台(Ctrl+`)看有没有 error parsing color scheme ——一个逗号放错位置,整份配色就静默失效。











