¿Cómo habilito el soporte a todo color en Vim?

98

Tengo un encantador esquema de colores de Vim ( xoria256 ) y se ve brillante en GVim, pero cuando uso normal vimen Terminal, el esquema de colores solo es parcialmente compatible, por ejemplo, se usa el color de fondo de berenjena semitransparente predeterminado. ¿Cómo hago que Terminal represente fielmente mi esquema de colores Vim?

David Siegel
fuente
44
Incluso el esquema de color predeterminado se ve mejor con 256 colores. Si no fuera por tu pregunta, nunca lo habría descubierto. Este debería ser el predeterminado.
Mihai Capotă

Respuestas:

79

El terminal GNOME admite 256 colores, pero no anuncia su compatibilidad. Puede anular la autodetección de vim poniendo lo siguiente:

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

en tu ~ / .vimrc.

Nota : si usa la pantalla GNU, se comerá esos códigos de 256 colores y los convertirá en 16 colores básicos. Una mejor solución es cambiar TERM a xterm-256color antes de iniciar screen / vim.

Actualización para 2017 : si tiene un Vim suficientemente reciente (7.4.1799 o más reciente) y un emulador de terminal suficientemente avanzado (xterm o gnome-terminal basado en una versión suficientemente reciente de VTE), puede :set termguicolorsy el terminal vim usará full Colores de 24 bits según lo definido por su tema vim usando highlight guifg=#rrggbb guibg=#rrggbb.

Marius Gedminas
fuente
1
¡Esto no funcionó, mi terminal todavía es berenjena!
David Siegel
¿Qué puedo decir? Funciona para mí cuando lo hago :set t_Co=256 | colorscheme xoria256.
Marius Gedminas
1
Puede probar la presencia de gnome-terminal en su vimrc, luego establecer la variable t_Co de manera apropiada. por ejemplo: if $COLORTERM == 'gnome-terminal'`set t_Co = 256` endif (no estoy seguro de cómo agregar bloques de código de varias líneas en los comentarios, así que agregue nuevas líneas antes y después de la declaración de set)
Matt
3
Es mejor usar gnome-256color para gnome-terminal y screen-256color para pantalla.
graywh
3
@trusktr google up CSApprox y CSExact vim extensiones.
Marius Gedminas
44

Una solución más general es instalar el término tipo "xterm-256color". En 10.04 creo que está instalado por defecto. Anteriormente necesitabas instalar "ncurses-term" para obtenerlo.

Luego configure el tipo de término en .bashrc con algo como lo siguiente:

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

Si prefiere tener solo la capacidad de 256 colores para ciertos programas (quizás confunda algunos otros), use en su lugar:

TERM=xterm-256color myprogram

y quizás establezca eso como un alias para el programa.

Luego verifique las capacidades de color de su terminal con:

$ tput colors
256

Es posible que aún necesite la configuración de vim anterior para que vim lo reconozca. La mayoría de las aplicaciones reconocerán los 256 colores automáticamente (si pueden usarlos).

Emacs también tiene temas de color que son mucho mejores con 256 colores. Para comprobar si funciona con 256 colores:

M-x list-colors-display

256colors.pl es un script de Perl que mostrará todos los colores en su terminal.

Dave Jennings
fuente
1
En realidad, gnome-256color es más correcto para gnome-terminal.
graywh
¿funcionará en zsh, no uso bash?
Vinit Kumar
2
David, no estoy 100% seguro de si es correcto, pero aquí hay una versión oneliner de su comando: [[ -n "$DISPLAY" && "$TERM" = "xterm" ]] && export TERM=xterm-256color. Verifique y siéntase libre de agregarlo a la publicación.
JJD
@JJD Debería funcionar, pero siempre puedes usar ;para hacer que todo sea de una sola línea.
Martin Ueding
1
@ dave-jennings El enlace al script está roto.
Martin Ueding
36

Simplemente incluya la línea a continuación en su $HOME/.bashrc(preferiblemente en la última línea del archivo):

export TERM="xterm-256color"

Y guárdalo. Después, reinicie su gnome-terminal. Este cambio estará disponible no solo en vim, sino también para todas sus aplicaciones de terminal.

Para verificar si funciona, ejecuta este pequeño 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")

A partir de entonces, verá algo como lo siguiente (depende de su tema gnome-terminal):

terminal

crncosta
fuente
2
Me pregunto por qué hacer el script en Python si solo contiene comandos de shell. Hay bucles, ratos, ifs y funciones en Bash, ya sabes;)
MestreLion
1

Bueno, siempre puedes configurar Gvim para que se vea como Vim. Solo tiene que crear un archivo ~ / .gvimrc y pegar en él estos trucos de personalización:

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

No creo que esto resuelva tu problema, pero quién sabe ;-)

wassimans
fuente
0

Hice un perfil separado para Vim que usa un color sólido y opaco en el fondo. Simplemente cambio manualmente cuando uso Vim. No estoy seguro de si hay o no un mejor método. Me gustaría pensar que sí.

DLH
fuente
2
Puede usar if has("gui_running")en su vimrc para establecer opciones específicas de la interfaz gráfica de usuario.
Matt