![如何在彩色 tty 上启用下划线和其他格式?](https://linux22.com/image/164370/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%BD%A9%E8%89%B2%20tty%20%E4%B8%8A%E5%90%AF%E7%94%A8%E4%B8%8B%E5%88%92%E7%BA%BF%E5%92%8C%E5%85%B6%E4%BB%96%E6%A0%BC%E5%BC%8F%EF%BC%9F.png)
我使用的是 Arch Linux(32 位替代版本),最近我发现我以前在 Vim 中看到的蓝线:set cursorline
应该是带下划线的,而不是蓝色的。
这让我四处寻找解决方案。
我没有使用图形环境,所以没有桌面环境或窗口管理器,只有很好的 ol' tty with zsh
,我目前最喜欢的 shell。
我发现这:hi CursorLine cterm=bold
使得光标线变得更漂亮,因为它现在不再是蓝色,大部分只是浅色,这已经让我的生活变得更好了。
我也尝试过cterm=underline
(仍然将线条渲染为蓝色),undercurl
尝试:hi clear CursorLine
然后重新做一遍,但没有任何东西给我带来我想要的下划线。
我在 上尝试了 Vim fbterm
,因为我相信它是一个准图形终端模拟器,但我得到了相同的行为,只是使用了更难看的超宽字体。
这不仅适用于 Vim,似乎也适用于任何事物。我在echo
es 上尝试了 ANSI 转义序列,当尝试为文本添加下划线时,我也得到了没有下划线的蓝色。
所以我相信某物丢失了,无论是字体、shell 配置、Vim 配置还是其他什么。
经过一番搜索后,我没有找到关于为什么我的 tty 缺少这些格式化选项的答案,所以我决定在这里询问。
还值得注意的是,我在运行 Raspbian 的 Raspberry Pi 3B+ 上尝试过此操作,并且在 tty 上得到了几乎相同的行为。
我设法让它工作的唯一地方是在我不时开始使用 Firefox 的 X 服务器上。我xterm
在它上面生成并瞧即使在 上键入命令时我也会得到下划线zsh
。
现在我将尝试使用不同的终端字体,看看我是否更接近美化我的 tty。
编辑01:
我用 Asciinema 录制了它,显示得很好,但我实际看到的正如我所描述的那样。
编辑02:
我正在读书这个 Arch 维基页面关于终端模拟器的部分,并决定尝试一下yaft
,因为听起来这可能正是我正在寻找的东西。
事实证明我已经安装了它,并且使用它确实至少启用了我想要的一些功能,所以这很棒。
答案1
Linux 控制台驱动程序不支持彩色显示器上的下划线,因为它是可读性和易于实现之间的折衷方案。自 20 世纪 90 年代中期以来一直如此,并记录在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 ] ...)
除了a之外,你不太可能有任何其他东西彩色显示。您可以更改用于描绘下划线的颜色,但它会以一种或另一种方式着色。手册页提到了用于自定义的转义序列调色板:
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