‹ 指南

保持文字清晰可讀:淺色主題下不再有「隱形」文字

有些程式按深色終端機來揀顏色,放到淺色主題下,文字幾乎看不見。現在 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 執行編程智能體