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.
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.xterm-256color
versión (buscar "38; 5;" en el archivo), pero no puedo en elscreen-256color
. Por ejemplo, donde hay una\e[38;5;81m
enxterm-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 deTERM=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 enxterm-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). thxRespuestas:
tmux
no es compatible con la capacidad de terminfobce
(borrado de color de fondo), quevim
comprueba si se usa el esquema de "color predeterminado".Esa característica de
tmux
ha sido mencionada varias veces:fuente
Tuve el problema similar antes. Los comentarios en azul en Vim fueron difíciles de leer. En
.tmux.conf
configurar esto:Y en
.vimrc
:Ahora se ve de la siguiente manera y funciona tanto en Gnome Terminal como en Cygwin:
fuente
bg=dark
en mi vimrc lo arregló.$TERM
tanto mi interior como el exteriortmux
,"xterm-256color"
y establecer explícitamente el fondo también lo hizo por mí. ¡Gracias!stterm
porquexfce4-terminal
todo parecía cómodo (aparecían comentarios encyan
lugar de losblue
cuales es muy difícil de leer con un fondo oscuro). Después de este cambio todo funciona bien. Pero recuerde agregarunlet! skip_defaults_vim source $VIMRUNTIME/defaults.vim
al archivo vimrc para usar el resaltado de sintaxis, etc ...Gracias al análisis de @ egmont de qué colores estaba produciendo Vim cuando
TERM=screen-256color
, me inspiró para ver el esquema de colores que Vim está utilizando en los dos escenarios.Vim informa que está utilizando el
default
esquema de color en ambos casos. Pensé que era extraño porque eldefault
esquema de color en Fedora 25 (/usr/share/vim/vim80/colors/default.vim
) no parece coincidir con los colores que realmente veo cuandoTERM=xterm-256color
. Si configuro explícitamente la combinación de colores con:colorscheme default
whenTERM=xterm-256color
, la apariencia de Vim cambia a esa cuandoTERM=screen-256color
. Para que los colores volvieran a ser lo que eran cuando comencé a usar Vim, tuve que usar elron
esquema de colores. ¡Progreso!Encontré una respuesta a Ask Ubuntu que sugiere que cuando Vim informa que está usando el
default
esquema de color, no necesariamente significadefault.vim
sino un esquema de color específico del tema. Como señala la respuesta, un tema oscuro (que estoy usando) corresponde alron
esquema de color, tal como descubrí anteriormente. (Aunque esta publicación es con respecto a Ubuntu, supongo que el OP estaba usando GNOME).También encontré otra pregunta que parece describir el mismo problema que estoy teniendo. Lo encontré mientras buscaba antes de publicar esta pregunta, pero, por alguna razón, el esquema de color no me pareció relevante.
Terminé haciendo lo que @LapshinDmitry hizo en su respuesta y lo configuré explícitamente
colorscheme ron
en mi~/.vimrc
archivo. Ahora, ya sea que empiece Vim dentro o fuera de tmux, los colores aparecen igual. El único inconveniente es que si alguna vez cambio mi tema de escritorio de un sabor oscuro a un sabor claro, Vim no cambiará automáticamente al esquema de color del tema claro "predeterminado", que aparentemente espeachpuff
. Puedo vivir con eso, ya que es poco probable que cambie mi tema.No voy a aceptar esta respuesta porque considero establecer explícitamente el esquema de color en mi
~/.vimrc
solución alternativa en lugar de la solución. Si alguien puede explicar por qué Vim carga un esquema de color "predeterminado" diferente según el valor deTERM
, me complacerá aceptar esa respuesta, ya que estoy más interesado en comprender la causa raíz. Sospecho que tiene algo que ver con cómo Vim interpreta las capacidades del terminal entre los dos archivos terminfo.fuente
vim
comporta de esta manera. Después de todo, labce
capacidad no debería tener nada que ver con la cantidad de colores disponibles.bce
capacidad del terminal, 2) si está presente, seleccione el esquema de color "A", 3) de lo contrario, seleccione el esquema de color "B". Creo que la profundidad de color es la misma en ambos casos (es decir, 256 colores, como set_Co
muestra). Es solo que el esquema de color "B" en mi sistema solo usa una paleta de 8 colores a pesar de que son posibles 256 colores (creo que eso explica lo que observó en su análisis mecanografiado; corríjame si me equivoco). Recuerde, después de correr:colorscheme ron
, veo secuencias de escape de 256 colores en la misma sesión de Vim.vim
tiene decisiones de diseño realmente extrañas.Eso es correcto y funciona para mí. Pruébelo con un terminal diferente (uso urxvt) para ver si Gnome Terminal es el problema.
También verifique
COLORTERM
(el mío está configurado enrxvt
) yunset TERMCAP
.fuente
TERM
esrxvt-unicode-256color
) usando un apropiado~/.Xdefaults
y desafortunadamente aún observé diferentes colores dentro y fuera de tmux. Para el escenario gnome-terminal,COLORTERM
estátruecolor
yTERMCAP
está vacío tanto dentro como fuera de tmux. Para el escenario urxvt,COLORTERM
estárxvt-xpm
fuera ytruecolor
dentro de tmux, mientras queTERMCAP
está vacío tanto dentro como fuera de tmux.:help xterm-true-color
o pruebe con una configuración de Vim más predeterminada.termguicolors
en mi.vimrc
e:set termguicolors?
informesnotermguicolors
en ambos casos. Veré el tema de ayuda al que hizo referencia; ¡Gracias!Para mi propia referencia más tarde, cuando indudablemente busqué en Google esta configuración de mi próxima máquina.
Use estas instrucciones para obtener los archivos binarios y DLL necesarios en la RUTA de Git bash:
https://blog.pjsen.eu/?p=440
Use estos comandos para configurar:
fuente