Medio ambiente:
- Fedora 25 (4.9.12-200.fc25.x86_64)
- Terminal 3.22.1 de GNOME con VTE versión 0.46.1 + GNUTLS
- VIM - Vi IMproved 8.0 (12 de septiembre de 2016, compilado el 22 de febrero de 2017 16:26:11)
- tmux 2.2
Recientemente comencé a usar tmux y he observado que los colores dentro de Vim cambian dependiendo de si estoy corriendo dentro o fuera de tmux. A continuación se muestran capturas de pantalla de Vim fuera (izquierda) y dentro (derecha) de tmux mientras se ve un Git diff:
Mi TERM
variable es
- Fuera de tmux:
xterm-256color
- Dentro de tmux:
screen-256color
Vim informa estos tipos de terminales como se esperaba (a través de :set term?
):
- Fuera de tmux:
term=xterm-256color
- Dentro de tmux:
term=screen-256color
Vim también informa que ambas instancias se ejecutan en modo de 256 colores (vía :set t_Co?
):
- Fuera de tmux:
t_Co=256
- Dentro de tmux:
t_Co=256
Hay muchas preguntas similares con respecto a hacer que Vim se ejecute en modo de 256 colores dentro de tmux (la mejor respuesta que encontré está aquí ), pero no creo que ese sea mi problema dada la información anterior.
Puedo duplicar el problema fuera de tmux si ejecuto Vim con el tipo de terminal establecido en screen-256color
:
$ TERM=screen-256color vim
Entonces eso me hace creer que simplemente hay alguna diferencia entre las capacidades de terminal xterm-256color
y screen-256color
que causa la diferencia de color. Lo que lleva a la pregunta planteada en el título: ¿qué específicamente en las capacidades del terminal hace que los colores Vim sean diferentes? Veo las diferencias entre correr :set termcap
dentro y fuera de tmux, pero tengo curiosidad sobre qué variables realmente causan la diferencia en el comportamiento.
Independientemente de la pregunta anterior, ¿ es posible que los colores de Vim sean consistentes cuando se ejecutan dentro o fuera de tmux? Algunas cosas que he probado incluyen:
- Establecer explícitamente el terminal predeterminado que tmux usa en
~/.tmux.conf
varios valores (algunos contra el consejo de las preguntas frecuentes de tmux ):
set -g default-terminal "pantalla-256color" set -g default-terminal "xterm-256color" set -g default-terminal "screen.xterm-256color" set -g default-terminal "tmux-256color"
- Iniciando tmux usando
tmux -2
.
En todos los casos, Vim continuó mostrando diferentes colores dentro de tmux.
xterm-256color
versión (buscar "38; 5;" en el archivo), pero no puedo en el screen-256color
. Por ejemplo, donde hay una \e[38;5;81m
en xterm-256color
(el color # 81 de la paleta de 256 colores, de un tono azul medio), screen-256color
contiene \e[34m
en su lugar (el estándar de color azul de la paleta de 8 colores). Entonces, la pregunta principal es por qué vim no usa la paleta de 256 colores en caso de TERM=screen-256color
.
xterm-256color
versión parece imprimir la pantalla dos veces, primero con los colores heredados y luego con la paleta de 256 colores. Busque, por ejemplo, "F1" en el archivo, encontrará dos coincidencias en xterm-256color
, la primera con \e[34m
color y la segunda con \e[38;5;81m
. No sé lo que está pasando aquí.
set -g default-terminal "screen.xterm-256color"
en ~/.tmux.conf
y volver a cargar la configuración en tmux (<Cs>: fuente-archivo ~ / .tmux.conf) trabajado para mí (tema más destacado). thx
script
, iniciarvim
, salirvim
y luego salirscript
del shell y adjuntar eltypescript
archivo resultante ? Luego repita los mismos pasos con en suTERM=screen-256color vim
lugar.