Como habilito o suporte de cores no Vim?


98

Eu tenho um adorável esquema de cores do Vim ( xoria256 ) e parece brilhante no GVim, mas quando uso normal vimno Terminal, o esquema de cores é apenas parcialmente suportado - por exemplo, a cor de fundo de berinjela semi-transparente padrão é usada. Como faço para o Terminal renderizar fielmente meu esquema de cores Vim?


4
Até o esquema de cores padrão fica melhor com 256 cores. Se não fosse a sua pergunta, eu nunca teria descoberto. Esse deve ser o padrão.
Mihai Capotă

Respostas:


79

O Terminal GNOME suporta 256 cores, mas não anuncia seu suporte. Você pode substituir a detecção automática do vim colocando o seguinte:

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

no seu ~ / .vimrc.

Nota : se você usar a tela GNU, ele ficará satisfeito com esses códigos de 256 cores e os converterá em 16 cores básicas. Uma solução melhor é alterar TERM para xterm-256color antes de iniciar o screen / vim.

Atualização para 2017 : se você possui um Vim suficientemente recente (7.4.1799 ou mais recente) e um emulador de terminal suficientemente avançado (xterm ou gnome-terminal com base em uma versão suficientemente recente do VTE), você pode :set termguicolorse o terminal vim usará completamente Cores de 24 bits, conforme definido pelo seu tema vim usando highlight guifg=#rrggbb guibg=#rrggbb.


1
Isso não funcionou, meu terminal ainda está beringela!
David Siegel

O que posso dizer - funciona para mim quando o faço :set t_Co=256 | colorscheme xoria256.
Marius Gedminas

1
Você pode testar a presença do gnome-terminal no seu vimrc e depois definir a variável t_Co adequadamente. por exemplo: if $COLORTERM == 'gnome-terminal'`definir t_Co = 256` endif (não tenho certeza como adicionar blocos de multi-linha de código em comentários, para adicionar novas linhas antes e depois da instrução set)
Matt

3
Melhor usar o gnome-256color para o terminal gnome e o screen-256color para a tela.
graywh

3
@trusktr google up extensões CSApprox e CSExact vim.
Marius Gedminas

44

Uma solução mais geral é instalar o termo tipo "xterm-256color". Na versão 10.04, acho que está instalado por padrão. Anteriormente, você precisava instalar "ncurses-term" para obtê-lo.

Em seguida, defina o tipo de termo em .bashrc com algo como o seguinte:

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

Se você preferir ter apenas a capacidade de 256 cores para determinados programas (talvez isso confunda alguns outros), use:

TERM=xterm-256color myprogram

e talvez defina isso como um apelido para o programa.

Em seguida, verifique os recursos de cores do terminal com:

$ tput colors
256

Você ainda pode precisar da configuração do vim acima para que o vim a reconheça. A maioria dos aplicativos reconhece as 256 cores automaticamente (se elas puderem ser usadas).

O Emacs também possui temas de cores muito melhores com 256 cores. Para verificar se é compatível com 256 cores:

M-x list-colors-display

256colors.pl é um script Perl que exibirá todas as cores em seu terminal.


1
Na verdade, o gnome-256color é mais correto para o gnome-terminal.
graywh

funcionará no zsh, eu não uso o bash?
Vinit Kumar

2
Dave, eu não estou 100% de certeza se é correto, mas aqui está uma versão oneliner do seu comando: [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. Verifique e sinta-se à vontade para adicioná-lo à postagem.
JJD

@JJD Deverá funcionar, mas você sempre pode usar ;para tornar tudo uma coisa só.
Martin Ueding

1
@ dave-jennings O link para o script está quebrado.
Martin Ueding

36

Basta incluir a linha abaixo no seu $HOME/.bashrc(de preferência na última linha do arquivo):

export TERM="xterm-256color"

E salve. Depois, reinicie o seu terminal gnome. Essa alteração estará disponível não apenas no vim, mas para todos os seus aplicativos de terminal.

Para verificar se funciona, execute este pequeno script :

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

Depois disso, você verá algo como o seguinte (depende do tema do seu gnome-terminal):

terminal


2
Eu me pergunto por que fazer o script em Python se ele contém apenas comandos shell. Existem loops, whiles, ifs e funções no Bash, você sabe;)
MestreLion

1

Bem, você sempre pode configurar o Gvim para parecer com o Vim. Você só precisa criar um arquivo ~ / .gvimrc e colar nele estes truques de personalização:

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

Eu não acho que isso resolve o seu problema, mas quem sabe ;-)


0

Eu criei um perfil separado para o Vim, que usa uma cor sólida e opaca no fundo. Apenas mudo manualmente sempre que uso o Vim. Não tenho certeza se existe ou não um método melhor. Eu gostaria de pensar assim.


2
Você pode usar if has("gui_running")no seu vimrc para definir opções específicas da GUI.
Matt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.