需编辑当前启用的.sublime-color-scheme文件,在rules数组中找到"name": "Selection"项,修改其background值为合法十六进制(如"#3399ff")或HSLA/RGBA字符串(如"hsla(210,30%,70%,0.3)"),保存后立即生效。

怎么改 selection 的 background 颜色?
Sublime 的选中文本颜色不是靠 Preferences.sublime-settings 控制的,必须修改当前启用的 .sublime-color-scheme 文件。你看到的“选中后看不见”“像没选中”“反光刺眼”,基本都是因为主题里 "name": "Selection" 这条规则的 background 值和编辑器背景太接近,或者用了纯黑/纯白导致对比过强。
- 先按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Show Scope Name回车,确认当前 scheme 路径,比如Monokai.sublime-color-scheme - 用命令面板运行
PackageResourceViewer: Open Resource,找到对应文件,复制全文到Packages/User/下新建副本(如Monokai-custom.sublime-color-scheme) - 在副本里搜索
"name": "Selection"或"scope": "selection",修改其中的background值,例如:"background": "#3399ff80"(注意:Sublime 不支持 8 位 hex 如#3399ff80,得用 HSLA/RGBA 格式,但 JSON scheme 中只认合法十六进制;实际应写成"#3399ff",透明度需靠主题自身支持或换用 HSLA 字符串) - 保存后立即生效,不用重启;若无效,检查 JSON 是否有语法错误(尤其逗号、引号、括号闭合)
为什么改了 selection 还是看不见同词高亮?
这不是 selection 的问题,而是原生 highlight_word 功能依赖另一个 scope:"name": "Highlight"(或带 region. 前缀的规则)。很多暗色主题把它的 background 设成极淡的灰(如 "#33333380"),在深背景上几乎不可见——看起来像功能失效,其实是颜色太淡。
- 在同一份
.sublime-color-scheme文件里搜索"Highlight"或"region.yellowish"等关键词 - 优先改
background,别只调foreground(那是文字色,对高亮无效) - 避免用纯色值如
"#FFFFFF",推荐带 alpha 的 HSLA/RGBA,比如"hsla(60, 40%, 90%, 0.4)",既清晰又不刺眼 - 确认用户设置里没关掉功能:
Preferences → Settings右侧检查没有"highlight_word": false
改颜色时最容易踩的坑有哪些?
绝大多数失败都出在路径、语法或作用域误判上,不是 Sublime 不支持,而是改错了地方。
- 改完保存,颜色完全没变 → 检查是否编辑的是
Packages/User/下的副本,而不是只读的原版(Packages/xxx/下的文件改了也无效) - 高亮变成一块实心色块,盖住文字 →
background值不带透明度(如用了"#FFD700"而非"hsla(40, 100%, 70%, 0.3)"),遮挡了foreground文字色 - 只有部分单词高亮,比如选中
user_id却不亮user_id_list→ 这是正常行为,Sublime 按 token 边界(下划线、大小写变化等)切分,不是字符串模糊匹配
Sublime Text 4 的 color_scheme 格式要注意什么?
Sublime Text 4(v4143+)强制使用 JSON 格式的 .sublime-color-scheme,旧版的 .tmTheme 已不被支持。
- 找到你当前用的主题文件夹(比如
Material Theme/或Default/),里面会有类似Material-Theme-Darker.sublime-color-scheme的文件 - 必须把新规则加在
"rules"数组末尾,不能放在"globals"下 -
"background"值必须是合法十六进制(如"#3399ff"),不支持rgb()或命名色;HSLA/RGBA 需写成字符串形式,且主题引擎必须支持(并非所有版本都兼容) - 若想让光标所在行的选中色更醒目,可额外加一条
"name": "Line Selection"规则
真正容易被忽略的是:Sublime 的高亮逻辑分层很细,selection、Highlight、lineHighlight 各自独立控制,改错一个 scope 就会以为整个功能坏了。

















