如何在Vim中启用全色支持?


98

我有一个可爱的Vim colorscheme(xoria256),它在GVim中看起来很漂亮,但是当我vim在Terminal中使用normal 时,仅部分支持colorscheme -例如,使用默认的半透明茄子背景色。如何使Terminal忠实地渲染Vim colorscheme?


4
即使使用256种颜色,默认的配色方案也看起来更好。如果不是您的问题,我永远不会发现。这应该是默认值。
MihaiCapotă10年

Answers:


79

GNOME终端支持256种颜色,但不公布其支持。您可以通过以下操作覆盖vim的自动检测功能:

if $COLORTERM == 'gnome-terminal'
  set t_Co=256
endif

在您的〜/ .vimrc中。

注意:如果使用GNU屏幕,它将很高兴吃掉那些256色代码并将其转换为16种基本颜色。更好的解决方法是在启动screen / vim之前将TERM更改为xterm-256color。

2017年更新:如果您具有足够新的Vim(7.4.1799或更高版本)和足够高级的终端仿真器(xterm或基于最新版本VTE的gnome-terminal),则可以,:set termguicolors并且终端vim将使用完整版本vim主题使用定义的24位颜色highlight guifg=#rrggbb guibg=#rrggbb


1
这没有用,我的终端机仍然是茄子!
David Siegel

我能说什么-对我有用:set t_Co=256 | colorscheme xoria256
Marius Gedminas

1
您可以测试vimrc中是否存在gnome-terminal,然后适当设置t_Co变量。例如: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (我不确定如何在注释中添加多行代码块,因此请在set语句之前和之后添加换行符)
Matt

3
最好将gnome-256color用于gnome-terminal,将screen-256color用于屏幕。
graywh 2011年

3
@trusktr google up CSApprox和CSExact vim扩展。
Marius Gedminas

44

一个更通用的解决方案是安装术语类型“ xterm-256color”。在10.04中,我认为它是默认安装的。以前,您需要安装“ ncurses-term”来获取它。

然后在.bashrc中设置术语类型,如下所示:

if [ -n "$DISPLAY" -a "$TERM" == "xterm" ]; then
    export TERM=xterm-256color
fi

如果您只希望某些程序具有256色功能(可能会混淆其他一些程序),请改用:

TERM=xterm-256color myprogram

并将其设置为程序的别名。

然后使用以下命令检查您的终端颜色功能:

$ tput colors
256

您可能仍需要上面的vim设置才能让vim识别它。大多数应用程序会自动识别256种颜色(如果可以使用的话)。

Emacs还具有256种颜色更好的颜色主题。要检查是否支持256色运行:

M-x list-colors-display

256colors.pl是Perl脚本,它将显示终端中的所有颜色。


1
实际上,gnome-256color对于gnome-terminal更正确。
graywh 2011年

它将在zsh中工作,我不使用bash吗?
维尼特·库马尔

2
Dave,我不确定100%是否正确,但这是 您的命令的oneliner版本[[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color。请验证并随时将其添加到帖子中。
JJD

@JJD应该起作用,但是您始终;可以使一切变得单一。
Martin Ueding 2013年

1
@ dave-jennings指向脚本的链接已断开。
Martin Ueding 2013年

36

只需$HOME/.bashrc将以下行添加到您的行中即可(最好在文件的最后一行):

export TERM="xterm-256color"

并保存。之后,重新启动您的gnome-terminal。此更改不仅适用于vim,而且适用于所有终端应用程序。

要检查它是否有效,请运行以下小脚本

#!/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")

此后,您将看到类似以下内容(取决于您的gnome-terminal主题):

终奌站


2
我不知道为什么如果只包含shell命令,就用Python编写脚本。Bash中有循环,whiles,if和函数;)
MestreLion 2015年

1

好了,您总是可以配置Gvim使其看起来像Vim。您只需要创建〜/ .gvimrc文件并将其粘贴以下自定义技巧即可:

set guioptions-=r  " no scrollbar on the right
set guioptions-=l  " no scrollbar on the left
set guioptions-=m  " no menu
set guioptions-=T  " no toolbar

我认为这不能解决您的问题,但是谁知道;-)


0

我为Vim制作了一个单独的配置文件,该配置文件在背景中使用纯色,不透明的颜色。每当我使用Vim时,我只是手动切换到它。不知道是否有更好的方法。我想是这样。


2
您可以if has("gui_running")在vimrc中使用来设置gui特定选项。
马特2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.