iTerm2不渲染vim真彩色colorscheme

Ran*_*ger 5 vim vim-plugin iterm2

Vim (v 8.0.1283) 正在 iTerm2 (v 3.2.4) 中绘制 8 位颜色,尽管配置看起来是正确的。$TERM设置正确:

$ echo $TERM
xterm-256color
Run Code Online (Sandbox Code Playgroud)

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

set background=dark
set termguicolors
colorscheme deep-space
Run Code Online (Sandbox Code Playgroud)

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

我尝试过重新启动并获取 vimrc、三次检查拼写和环境变量、重新阅读配色方案的文档,但似乎无法弄清楚它的情况。我在这里缺少什么明显的东西吗?

jer*_*ile 5

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

当我遇到这个问题时,是因为我的vim colorcheme使用的是truecolor(24位)而tmux仅支持8位(256色)。

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

首先,使用以下 python 脚本确保默认终端和 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")
Run Code Online (Sandbox Code Playgroud)

预期输出是每条线都有不同的颜色,最多 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";
}'
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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