Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim RGB值如何/在何处映射到xterm颜色代码?它们能被推翻吗?_Vim_Xterm_Iterm - Fatal编程技术网

Vim RGB值如何/在何处映射到xterm颜色代码?它们能被推翻吗?

Vim RGB值如何/在何处映射到xterm颜色代码?它们能被推翻吗?,vim,xterm,iterm,Vim,Xterm,Iterm,我试图准确地理解在我的终端模拟器(iTerm2)中如何处理颜色 在iTerm2中,我可以配置我的“基本16”调色板-在iTerm2中,这是使用HSL完成的,而不是16位RGB值。以这种方式定义的颜色是本地的-它们使用cocoa API,并且不限于典型的256调色板(它们以真彩色呈现) X11定义256调色板中颜色的名称 在shell、bash或zsh中,我可以使用带有echo-e“\e[38;5;82mHello\e[38;5;198mWorld”的16位256调色板打印文本(第三个参数是xte

我试图准确地理解在我的终端模拟器(iTerm2)中如何处理颜色

在iTerm2中,我可以配置我的“基本16”调色板-在iTerm2中,这是使用HSL完成的,而不是16位RGB值。以这种方式定义的颜色是本地的-它们使用cocoa API,并且不限于典型的256调色板(它们以真彩色呈现)

X11定义256调色板中颜色的名称

在shell、bash或zsh中,我可以使用带有
echo-e“\e[38;5;82mHello\e[38;5;198mWorld”
的16位256调色板打印文本(第三个参数是xterm颜色代码)

在vim(终端非gui)中,定义高光时,颜色用作“字符m”值(例如:
:高光普通字符mfg=188字符mbg=233 guifg=#e8e8d3 guibg=#151515
)但是,据我所知,没有办法使用RGB代码定义终端颜色,因此,虽然我可以用truecolor显示base16颜色,但其余颜色被任意限制为256调色板

我还没有弄清楚rgb值映射到xterm代码的位置。它似乎是一种任意关系(xterm代码似乎与rgb值没有函数关系),因此我假设一定在某个位置存在映射

我相信颜色可以在.Xresources()中重新定义,但我不确定以下几点:

  • .Xresources是特定于xterm终端模拟器的,我使用的是iTerm2,因此(我认为)这与我的情况无关。我已经胡闹了一番,iTerm2似乎不尊重.Xresources配置。我找不到有关此主题的更多文档
  • 我已经读到xterm将近似于web安全调色板之外的.Xresources中的颜色定义-我不确定这是真的还是它是如何实现的,但我认为这是与用于存储颜色的位数相关的历史限制
  • 所以在这一点上,我认为它的工作方式是:

  • 终端应用程序发出与xterm兼容的转义码序列,并且颜色始终定义为xterm颜色码(0-255)
  • iTerm2检测逃逸序列
  • iTerm2使用一个尊重X11的rgb.txt的内部映射将xterm颜色代码映射到HSL值
  • iTerm2使用cocoa API渲染颜色
  • 因此,颜色映射或转换中不涉及任何其他应用程序(X11或任何其他应用程序)——它直接从终端应用程序到终端仿真器

    在这种情况下,由于iTerm2仅允许用户配置“基本16色”,因此用户可以在仅渲染这些颜色时自由使用真彩色,但仅限于用于所有其他颜色的web安全调色板

    这是正确的吗?

    是标准的,在每个xterm实现中都应该是相同的。它与仅由GUI程序使用的或多或少的标准rgb.txt不同。

    前16种颜色(0-15)或多或少都有标准名称,“红色”、“暗绿色”等。但所有其他颜色只能通过数字表示,从16到255

    前16种颜色通常可以由用户定义(使用CMYK、HSL、RGB或十六进制表示法,这无关紧要),因此在配色方案中使用“红色”或“2”几乎是在黑暗中拍摄的,因为无法保证“红色”实际上是红色。Solarized是一个可怕的例子,传统上颜色被称为“亮绿色”实际上是一种深灰色

    大多数“现代”终端仿真器允许您使用GUI定义这16种颜色,但其他更“老派”的仿真器(如xterm或rxvt)使用
    ~/.Xresources
    。该文件完全被iTerm忽略,因此您不应该在上面浪费时间

    这是可能的,但很少有人知道,这使得这种做法非常罕见

    所以

    • 终端模拟器不使用rgb.txt
    • 颜色0-15是用户可配置的
    • 颜色16-255仅限于第一个链接中的颜色图表
    • 颜色16-255可以更改,但很少见
    • iTerm不使用.Xresources

    实际上,终端模拟器之间的颜色值确实不同(请参见xterm常见问题解答)。事实上,默认颜色可以更改。在我短暂的经验中,我看到了更多(微妙的)从一个
    rgb.txt
    到另一个而不是从一个16-255调色板到另一个调色板的变化。xterm的一些默认颜色使用rgb,一些使用命名颜色-通常是用户可配置的0-15。
    rxvt
    和其他普通X11应用程序具有相同的注释。基于Gtk的应用程序可能不使用
    rgb.txt
    。任何xterm的许多颜色可以在运行时更改-一些可以通过多种方法更改。是的,这种混乱正是因为我建议抑制。人们的口味不同(我将我的建议限制在技术有效或无效的情况下)。顺便说一句,您链接到的colorcoke页面在urxvt方面似乎不准确(它已经能够修改256色调色板一段时间了)。