‹ 指南

保持文字清晰可读:浅色主题下不再有“隐形”文字

有些程序按深色终端来挑颜色,放到浅色主题下,文字几乎看不见。现在 Term 会把它加深到刚好能读——自动完成,几乎不占性能。

撰写于

问题在哪

很多命令行程序会自己挑颜色,而且不少默认终端是深色的:浅灰、淡黄、白色的文字,在黑底上很好看。换到 Term 的浅色主题,这些输出就融进了白色背景里——你知道那里有字,却看不清写的是什么。

反过来也会发生:为浅色终端设计的程序,在深色主题下画出的深色文字同样会消失。

Term 现在怎么做

Term 在绘制每段文字时都会检查一下。如果文字颜色和身后的背景太接近,就把它加深(浅色背景)或调亮(深色背景)——只调到刚好能读,并保留原来的色相:淡黄会变成看得清的黄色,而不是黑色。

同一个 Python 文件用 bat 以深色配色显示两次,都在 Term 的浅色主题下。左边大部分名称、括号和字符串很淡,几乎看不见;右边同样的文字被加深,清晰可读,粉色、绿色、蓝色的高亮保持原色。
同一屏,关闭与开启。 左:一个使用深色配色的查看器跑在 Term Light 上——名称、括号和取值几乎消失。右:开启「保持文字清晰可读」后,它们被加深到刚好能读,程序自己的高亮颜色不变。

你可能在哪里遇到

上面那张图是最常见的情况:代码查看器的默认配色按深色终端设计。下面是我们见得最多的另外几种,每组左边关闭、右边开启。

带“透明背景”的编辑器主题。 很多 vim / Neovim 配置会把深色配色方案和“透明背景”搭在一起,让编辑器直接透出终端自己的背景。换到浅色主题,方案里的浅灰文字就落在了白底上。

Neovim 使用深色配色方案和透明背景,运行在 Term 的浅色主题上。左边普通代码是浅灰色,难以看清;右边被加深,清晰可读,绿色字符串和棕色关键字保持原色。
Neovim,深色方案,透明背景。 代码从模糊变清晰,方案自己的颜色不变。

用低调灰色的命令行提示符。 流行的提示符主题会用很浅的颜色画时间、git 分支和命令耗时,在深色终端上它们安静地待在背景里;到了浅色终端就看不见了。

两行的命令行提示符,显示时间、目录、带改动的 git 分支 main,以及上一条命令的耗时。左边时间、on、分支名和 took 3s 几乎看不见;右边全部清晰可读。
powerlevel10k 风格的提示符。 分支名和命令耗时又回来了。

程序拿不到全彩色的时候。 在 sudo 里、某些 tmux 配置下,或者服务器没有把颜色设置传过去时,程序会退回到 256 色。这套颜色里有自己的浅灰、米白,任何浅色主题都调整不了它们。「保持文字清晰可读」同样能处理。

与第一张图相同的文件查看器,这次只用 256 色。左边大部分代码很淡,几乎看不见;右边清晰可读。
第一个例子,换成 256 色。 同样的问题,同样修好。

哪些地方原样不动

开启或关闭

它默认开启。要更改,打开 设置 → 终端,保持文字清晰可读 就在 外观 里、终端主题的下面。

Term 的终端设置“外观”部分:终端主题为 Term Light,下面的“保持文字清晰可读”开关已打开,附有说明。
设置 → 终端 → 外观。 一个开关,作用于所有会话。

开关立即生效,所有已打开的会话都会马上更新,无需重新连接。

性能开销

几乎为零。满屏文字——120 列 × 50 行,共 6000 个字符——在我们的测量中,这项检查在笔记本芯片上每帧约增加 0.02 毫秒,在手机上估计约 0.05 毫秒。60 帧每秒时一帧有 16.7 毫秒,这还不到一帧的百分之一,滚动手感完全一样。

程序为什么会选错颜色?

好的终端程序会先问终端背景是什么颜色,再选一套匹配的主题,Term 总会回答。但有些连接根本不把这个问题传过去——原版 mosh 服务端就是其中之一——程序只能猜,而通常猜的是“深色”。「保持文字清晰可读」正是为这种情况兜底。用 termosh 代替 mosh-server,问题就能传到,程序可以自己选浅色主题。

更想用程序自己的方案?

如果程序自带浅色主题或相关设置,那样的效果永远最好。「保持文字清晰可读」是它没有时的安全网。

相关:用 termosh 通过 mosh 运行编程智能体