Vim: Diferencia entre t_Co=256 y term=xterm-256color en combinación con TMUX
terminal (2)
Cuando no utiliza tmux
o screen
, solo necesita configurar sus emuladores de terminal para anunciarse como "capaces de mostrar 256 colores" estableciendo su TERM
a xterm-256color
o cualquier valor comparable que funcione con sus terminales y plataformas. Cómo lo hará dependerá del emulador de la terminal y está fuera del alcance de su pregunta y esta respuesta.
No necesita hacer nada en Vim ya que es perfectamente capaz de hacer lo correcto por sí mismo.
Cuando usas tmux
o screen
, esos programas establecen su propio valor predeterminado para $TERM
, generalmente screen
, y Vim hace lo que tiene que ver con la información que se le proporciona.
Si desea un comportamiento más uniforme (y colorido), debe configurarlos para usar un valor "mejor" para $TERM
:
tmux
Agregue esta línea a
~/.tmux.conf
:set -g default-terminal "screen-256color"
pantalla
Agregue esta línea a
~/.screenrc
:term "screen-256color"
Ahora, ambos multiplexores le dirán a Vim que son compatibles con 256 colores y Vim hará lo que usted espera que haga.
editar
Mi respuesta asume que puede editar esos archivos de configuración pero, como puede editar su ~/.vimrc
, no creo que esté tan lejos de la realidad.
editar 2
El valor de la opción de term
(recuperado con &term
) es el nombre del terminal recogido por Vim al inicio. Ese nombre es lo que se supone que debes configurar en tu emulador de terminal.
El valor de la opción t_Co
( &t_Co
) es lo que Vim considera que es la cantidad máxima de colores que puede mostrar el terminal host. Se define según la entrada correspondiente a $TERM
en terminfo
:
term | t_Co
-----------------+------
xterm | 8
xterm-256color | 256
screen | 8
screen-256color | 256
Cuando Vim se inicia, obtiene el valor de la variable de entorno TERM
, consulta la terminfo
datos terminfo
con ese valor y almacena una cantidad de información en su entorno en varias variables t_…
entre las cuales ... la cantidad de colores disponibles en t_Co
. Dado un tipo de terminal "legal" (uno que Vim puede buscar), Vim siempre asume la cantidad correcta de colores.
Establecer t_Co
en 256
mientras se deja el term
en su valor definido por Vim o, más generalmente, establecer t_Co
y / o term
en valores que no coinciden con el terminal anfitrión, no tiene sentido y es probable que cree problemas cuando Vim envía una señal eso no es entendido por el terminal o viceversa.
Si bien es completamente posible hacerlo, jugar con t_Co
y el term
en Vim es totalmente inútil y posiblemente dañino.
Nuevamente, simplemente configure sus emuladores de terminal y multiplexores de terminal correctamente. Eso es todo lo que necesitas
Si termina en un multiplexor de terminal o un emulador de terminal donde no puede definir un TERM
correcto, entonces y solo entonces puede forzar a Vim a asumir 256 colores. Con ese fin, cambiar el valor de t_Co
es lo único que tiene sentido:
if &term == "screen"
set t_Co=256
endif
Entonces ... si puede configurar cada parte individual:
- emulador de terminal:
xterm-256color
- tmux / screen:
screen-256color
- vim: nada
y has terminado.
Si no puede controlar cada parte, use un condicional simple en su ~/.vimrc
para establecer t_Co
acuerdo con &term
pero no cambie el valor del term
.
Pero si puede editar un ~/.vimrc
no hay ninguna razón por la que no pueda editar un ~/.screenrc
o ~/.tmux.conf
o ~/.bashrc
o lo que sea.
Estoy probando los diferentes terminales que tiendo a usar para SSH en los cuadros de Linux en los que tengo configurado Tmux.
Básicamente noté este comportamiento, y espero que alguien pueda ofrecer una explicación de lo que está pasando. Ahora puede ser el caso de que este sea un comportamiento específico que afecta a la aplicación Prompt.
Estoy usando Vim en Tmux, y en la aplicación Panic''s Prompt en mi iPhone5 estaba teniendo el comportamiento de que 256 colores no estaban habilitados cuando el .vimrc
establece los colores usando la set t_Co=256
. Aquí, Vim estaba mostrando correctamente los colores cuando no se ejecutó a través de Tmux. Además, el Terminal.app de OS X procesó correctamente los colores (desafortunadamente, no probé PuTTY con esto en Windows) con Vim en Tmux.
Luego set t_Co=256
para set term=xterm-256color
y ahora los colores funcionan cuando se usa Vim a través de Tmux.
Tenga en cuenta también que probé la set -g default-terminal "xterm-256color"
y set -g default-terminal "screen-256color"
para Tmux y este cambio no tuvo efecto en el comportamiento.
Puede usar tanto set t_Co=256
como set term=xterm-256color
juntos.
term
le dice a Vim qué tipo de terminal usar, que controla la visualización / representación de todos los aspectos de Vim, incluyendo cómo mapear entrada clave, redibujar la pantalla, mover el cursor, mostrar colores, etc. Normalmente, Vim puede resolver esto en su propio a través de la variable de entorno TERM
proporcionada por su sistema operativo.
A menudo es útil establecerlo explícitamente en caso de que el valor del sistema operativo sea incorrecto. Esto es especialmente cierto si se está conectando a través de una red desde un emulador de terminal que no proporciona el valor correcto.
t_Co
es una de las muchas opciones de terminal (utilizada por el sistema termcap que Vim usa para el control de terminales). Se refiere específicamente a la cantidad de colores que admite la terminal. A veces es necesario anular esto si la emulación del terminal es en su mayoría correcta, pero Vim no identifica correctamente la cantidad de colores admitidos.
Uso ambas opciones en mi .vimrc
para asegurarme de que Vim use 256 colores en tmux usando todos los terminales que me gustan (el gnome-terminal de Ubuntu, el iTerm2 de OSX y el KiTTY de Windows). También tengo la mayoría de esos terminales explícitamente configurados para enviar xterm-256color
como su tipo de terminal.