终端颜色理论

0fn*_*fnt 4 colors vim terminal

TLDR:终端颜色背后的理论是什么?

我有一个固定的 LS_COLORS 数值: no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;33:*.cmd=00;33:*.exe=00;33:*.com=00;33:*.btm=00;33:*.bat=00;33:*.sh=00;33:*.csh=00;33:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:*.c=00;41:*.cpp=00;41:*.h=00;44:*.cu=00;43:*.cuh=00;43:ex=00;32

我想知道是什么导致 gnome-terminal、urxvt 和 yakuake 对相同的文件类型显示明显不同的颜色?差异范围从非常相似(但明显不同)到截然不同 - 棕色与黄色。

同样,vim 颜色的显示方式也有所不同,我在所有三个终端中都看到了非常不同的颜色。当 t_Co=8(vim 支持 8 色)和 t_Co=256(vim 支持 256 色)时。

更糟糕的是,当我从互联网上复制 .XResources 时,它具有英文名称的颜色,vim 中的相同颜色方案显示出非常不同的颜色。(我想我可以将其归因于 vimscheme 中名称的使用以及 .Xresources 的颜色重新定义)

有人可以帮助我理解终端颜色工作原理背后的理论吗?一个链接会很好用。如果有人感觉特别慷慨——也许他们也可以提供提示以确保我始终拥有一个标准的环境,特别是在 vim 的上下文中?

我应该注意到,在 yakuake 上,我的颜色主题是:“Linux 主题”(这似乎只是标准主题),而在 gnome-terminal 上我没有主题。当我检查“用户系统颜色”选项时,颜色甚至更糟,并且输出本身被破坏(例如,vanillals将每个文件显示在不同的行上)。对于 urxvt,我在 .Xresources 和xrdb -qyields 中定义的唯一与颜色相关的字段是:

Urxvt.background: #000000 
Urxvt.foreground: #FFFFFF
Run Code Online (Sandbox Code Playgroud)

好的,所以一些截图来解释我在说什么(第一个是在 yakuake 上,第二个是在 urxvt 上)

在药烧 在 urxvt 差别显然很大……

使用:http : //www.vim.org/scripts/script.php? script_id=1349(第一个是 yakuake,第二个是 urxvt)

在此处输入图片说明 在此处输入图片说明

ori*_*ion 5

索引调色板具有可供解释的实际渲染 - 在实际硬件上,有不同的标准(尤其是棕色与深黄色,棕色更有用且更美观)。

看看这个:https : //en.wikipedia.org/wiki/Color_Graphics_Adapter

在终端模拟器上,这取决于配置。大多数模拟器都定义了一个模式(echo $TERM),确定它正在模拟的老式硬件。颜色是变化最少的——其他控制代码(控制光标位置的不可见字符串、粗体/反转视频、闪烁等)也可以有不同的代码。这就是你有时会得到的垃圾,当你在终端类型设置不正确(例如通过 ssh)时按下光标。一些更复杂的模拟器实际上并不关心古老的颜色标准,而是让您定义自己的颜色(Konsole - Yakuake 使用的 - 具有颜色配置文件)。现代终端仿真器实际上支持比这更多的颜色 (256),但当然,在终端中运行的应用程序必须识别这种能力(通过 termcap 或其他方式,或通过读取$TERM变量),并输出正确的字符组合以使用它们。

你真正想要阅读的是这个,甚至还有一个颜色表:https : //en.wikipedia.org/wiki/ANSI_escape_code