如何在彩色 tty 上啟用下劃線和其他格式?
我在 Arch Linux(一個 32 位的替代版本)上,最近我發現我以前在 Vim 中看到的藍線
:set cursorline
應該是下劃線的,而不是藍色的。這讓我四處尋找解決方案。
我沒有使用圖形環境,所以沒有桌面環境或視窗管理器,只有很好的 ol’tty
zsh
,我目前最喜歡的 shell。我發現這
:hi CursorLine cterm=bold
讓游標線更漂亮了,因為它現在不再是藍色,大部分情況下只是更淺的顏色,這已經讓我的生活變得更好了。我也嘗試過
cterm=underline
(仍然將線渲染為藍色),然後undercurl
嘗試:hi clear CursorLine
重新做一遍,但沒有任何東西給我帶來我想要的下劃線。我在 上嘗試過 Vim
fbterm
,因為我相信它是一個準圖形終端仿真器,但我得到了相同的行為,只是使用了更醜陋的超寬字型。這不僅適用於 Vim,而且似乎適用於任何東西。我在 es 上嘗試了 ANSI 轉義序列
echo
,當嘗試給文本加下劃線時,我也得到了沒有下劃線的藍色。所以我相信缺少一些東西,無論是字型、shell 配置、Vim 配置還是其他什麼。
在搜尋了相當多之後,我沒有得到關於為什麼我的 tty 缺少這些格式選項的答案,所以我決定在這裡問。
還值得注意的是,我在執行 Raspbian 的 Raspberry Pi 3B+ 上進行了嘗試,並且在 tty 上得到了幾乎相同的行為。
我設法讓它工作的唯一地方是在我不時開始使用 Firefox 的 X 伺服器上。我
xterm
在它上面生成了,瞧,即使在zsh
.我現在將嘗試使用不同的終端字型,看看我是否更接近於美化我的 tty。
編輯01:
我用 Asciinema 錄製了它,它在那裡顯示得很好,但我實際看到的和我描述的一樣。
編輯02:
我正在閱讀有關終端模擬器部分的Arch Wiki 頁面
yaft
,並決定嘗試一下,因為聽起來它可能正是我正在尋找的東西。事實證明我已經安裝了它,並且使用它確實至少啟用了我想要的一些功能,所以這很棒。
Linux 控制台驅動程序不支持彩色顯示器上的下劃線,因為它是可讀性和易於實施之間的折衷。自 1990 年代中期以來一直如此,並記錄在
console_codes(4)
:4 set underscore (simulated with color on a color display) (the colors used to simulate dim or underline are set using ESC ] ...)
除了彩色顯示器之外,您幾乎沒有其他任何東西。您可以更改用於描繪下劃線的顏色,但它會以一種或另一種方式著色。手冊頁提到了用於自定義調色板的轉義序列:
ESC ] OSC (Should be: Operating system command) ESC ] P nrrggbb: set palette, with parameter given in 7 hexadecimal digits after the final P :-(. Here n is the color (0–15), and rrggbb indicates the red/green/blue values (0–255). ESC ] R: reset palette
以及用於告訴 16 個調色板條目中的哪些將顯示暗淡和下劃線的轉義序列:
ESC [ 1 ; n ] Set color n as the underline color. ESC [ 2 ; n ] Set color n as the dim color.
設置
TERM
為“xterm”的任何變體都會產生糟糕的結果,因為
- Linux 控制台驅動程序不支持 xterm 終端描述中的內容,並且
linux
終端描述旨在使用 Linux 控制台驅動程序的實際功能。用於
infocmp linux xterm-256color
查看差異。它很長,所以這裡有一個摘要來顯示差異的大小:$ infocmp -1x linux | wc -l 122 $ infocmp -1x xterm-256color |wc -l 272 $ infocmp -1x linux xterm-256color | wc -l 213