【问题标题】:iTerm2 not rendering vim true color colorschemeiTerm2 不渲染 vim 真彩色配色方案
【发布时间】:2018-11-16 15:58:48
【问题描述】:

尽管配置似乎正确,但 Vim (v 8.0.1283) 在 iTerm2 (v 3.2.4) 中绘制 8 位颜色。 $TERM 设置正确:

$ echo $TERM
xterm-256color

这是我~/.vimrc的相关部分:

set background=dark
set termguicolors
colorscheme deep-space

这个主题的repo 没有指向 vimrc 的任何进一步配置。更令人困惑的是,这些主题是从 rafi/awesome-vim-colorschemes 使用 vim-plug 提取的,其中许多主题都可以完美运行。文档说插件需要真彩色(我假设是 256)。

我已经尝试重新启动和采购 vimrc,三重检查拼写和 env 变量,重新阅读配色方案的文档,但似乎无法理解它。我这里有什么明显的遗漏吗?

【问题讨论】:

    标签: vim vim-plugin iterm2


    【解决方案1】:

    真彩色(24 位)不是 256 色(8 位)。复制自我的另一个答案:

    当我遇到这个问题时,是因为我的 vim 颜色方案使用的是真彩色(24 位),而 tmux 只支持 8 位(256 色)。

    以下是检查颜色支持的方法:

    首先,请确保您的默认终端和 tmux 支持 256 色:

    #!/usr/bin/env python
    # Copyright (C) 2006 by Johannes Zellner, <johannes@zellner.org>
    # modified by mac@calmar.ws to fit my output needs
    # modified by crncosta@carloscosta.org to fit my output needs
    
    import sys
    import os
    
    def echo(msg):
        os.system('echo -n "' + str(msg) + '"')
    
    def out(n):
        os.system("tput setab " + str(n) + "; echo -n " + ("\"% 4d\"" % n))
        os.system("tput setab 0")
    
    # normal colors 1 - 16
    os.system("tput setaf 16")
    for n in range(8):
        out(n)
    echo("\n")
    for n in range(8, 16):
        out(n)
    
    echo("\n")
    echo("\n")
    
    y=16
    while y < 231:
        for z in range(0,6):
            out(y)
            y += 1
    
        echo("\n")
    
    
    echo("\n")
    
    for n in range(232, 256):
        out(n)
        if n == 237 or n == 243 or n == 249:
            echo("\n")
    
    echo("\n")
    os.system("tput setaf 7")
    os.system("tput setab 0")
    

    预期的输出是每条线都是不同的颜色,最多有 1 条白线。如果黑底白字的行数较多,则说明您没有启用 256 色。

    接下来,使用此 bash 脚本检查您的终端/tmux 中是否支持真彩色:

    #!/bin/bash
    # Based on: https://gist.github.com/XVilka/8346728
    
    awk -v term_cols="${width:-$(tput cols || echo 80)}" 'BEGIN{
        s="/\\";
        for (colnum = 0; colnum<term_cols; colnum++) {
            r = 255-(colnum*255/term_cols);
            g = (colnum*510/term_cols);
            b = (colnum*255/term_cols);
            if (g>255) g = 510-g;
            printf "\033[48;2;%d;%d;%dm", r,g,b;
            printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
            printf "%s\033[0m", substr(s,colnum%2+1,1);
        }
        printf "\n";
    }'
    

    这个的预期输出如下所示:

    预期的行为是 tmux 将支持 256 色但不支持真彩色,并且您的终端将同时支持这两种颜色。如果这是真的,并且您的 vim 颜色方案仍然看起来很糟糕,那么您很可能正在使用真彩色颜色方案,而 tmux 无法支持它。您可以切换到 256 色版本,也可以为此感到难过。很抱歉没有好消息。

    【讨论】:

    • 欣赏答案。运行脚本显示我的终端同时支持真彩色和 256。编辑我的问题标题虽然更准确。
    • 不过,好消息是 tmux 仍然可以支持真彩色:medium.com/@dubistkomisch/…
    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多