终端选中文本背景色必须单独配置terminal.selectionbackground,不继承editor.selectionbackground;需在settings.json根对象中设置十六进制或rgba值,保存后需重启终端生效,且受插件、远程配置及shell层设置覆盖。

终端里鼠标选中的文字背景色,和编辑器里的 editor.selectionBackground 完全无关,必须单独配 terminal.selectionBackground,漏掉这个就永远看不到高亮效果。
terminal.selectionBackground 是唯一生效的设置项
VSCode 终端面板(Ctrl+Shift+` 打开的那个)中你拖选文字时的底色,只认 terminal.selectionBackground。它不继承 editor.selectionBackground,也不走 workbench.colorCustomizations 里 editor 相关的任何字段——写错地方等于没写。
- 必须加在用户级或工作区级的
settings.json根对象里,不是嵌套在workbench.colorCustomizations下 - 值支持十六进制(如
"#4a4a4a")或 rgba(如"rgba(74, 74, 74, 0.7)"),不支持 rgb()、命名色或带空格的写法 - 改完保存后,已打开的终端不会刷新——得关掉再按 Ctrl+Shift+` 开新终端才生效
- 深色主题下别用纯黑
"#000000",容易让选中文字和背景融为一体;浅色主题下慎用纯白,反光刺眼
为什么改了没反应?常见覆盖源有三个
最常踩的坑不是配置错,而是被更高优先级的东西盖掉了:
- 某些终端美化插件(比如
Terminal Background或自定义 CSS 扩展)会直接注入样式,绕过 VSCode 原生颜色系统 → 临时禁用插件验证 - 你用了 Remote-SSH / WSL,但只改了本地
settings.json→ 看右下角有没有「Remote」字样,确保改的是远程窗口的配置 - PowerShell 或 zsh 启动时硬编码了 ANSI 选中色(比如 oh-my-zsh 的
zle_highlight设置)→ 在终端里运行echo $ZLE_HIGHLIGHT或$PSReadLineOptions.SelectionColor检查是否被 shell 层劫持
搭配 terminal.foreground 控制对比度
只调 terminal.selectionBackground 不够,还得看文字本身颜色是否可读。终端默认文本色由 terminal.foreground 控制,它和 ANSI 色表无关,是所有非转义文本的底色。
- 例如背景设成
"#2d2d2d",文字却用"#888",就会灰蒙蒙一片 → 推荐搭配"#e0e0e0"这类柔和白 - 如果提示符用了 ANSI 转义(比如
\x1b[34m),那还得同步调terminal.ansiBrightBlue,否则只有普通命令输出变色,提示符还是老样子 - Windows 上 PowerShell 可能通过
$Host.UI.RawUI.BackgroundColor强行覆盖终端背景,但它不影响选中文本色;不过若背景被抢,选中色也会因对比度崩塌而“看不见”
透明度值别设太高,尤其在 macOS 上
rgba() 的 alpha 值建议控制在 0.5–0.8 之间。设太高(比如 0.95)会导致选中区域像贴了一层磨砂玻璃,语法高亮、括号匹配这些叠加层全被压暗;设太低(
- macOS 用户注意:如果系统开启了「Reduce transparency」辅助功能,所有 rgba 颜色都会被强制转为不透明,此时 alpha 再怎么调都无效 → 关掉该系统设置才能生效
- Windows 用户若启用了「透明效果」,部分 GPU 渲染路径下 rgba 可能轻微偏暗,建议实测后微调
- 别指望靠
terminal.backgroundOpacity来间接影响选中色——它只控制终端整体背景蒙版,对terminal.selectionBackground零作用











