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?

David Siegel
fonte
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.

Marius Gedminas
fonte
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.

Dave Jennings
fonte
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, <[email protected]>
# modified by [email protected] to fit my output needs
# modified by [email protected] 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

crncosta
fonte
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 ;-)

wassimans
fonte
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.

DLH
fonte
2
Você pode usar if has("gui_running")no seu vimrc para definir opções específicas da GUI.
Matt