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 TERMvariable 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-256colory screen-256colorque 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 termcapdentro 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.confvarios 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, salirvimy luego salirscriptdel shell y adjuntar eltypescriptarchivo resultante ? Luego repita los mismos pasos con en suTERM=screen-256color vimlugar.xterm-256colorversión (buscar "38; 5;" en el archivo), pero no puedo en elscreen-256color. Por ejemplo, donde hay una\e[38;5;81menxterm-256color(el color # 81 de la paleta de 256 colores, de un tono azul medio),screen-256colorcontiene\e[34men 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-256colorversió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[34mcolor y la segunda con\e[38;5;81m. No sé lo que está pasando aquí.set -g default-terminal "screen.xterm-256color"en~/.tmux.confy volver a cargar la configuración en tmux (<Cs>: fuente-archivo ~ / .tmux.conf) trabajado para mí (tema más destacado). thxRespuestas:
tmuxno es compatible con la capacidad de terminfobce(borrado de color de fondo), quevimcomprueba si se usa el esquema de "color predeterminado".Esa característica de
tmuxha sido mencionada varias veces:fuente
Tuve el problema similar antes. Los comentarios en azul en Vim fueron difíciles de leer. En
.tmux.confconfigurar esto:Y en
.vimrc:Ahora se ve de la siguiente manera y funciona tanto en Gnome Terminal como en Cygwin:
fuente
bg=darken mi vimrc lo arregló.$TERMtanto mi interior como el exteriortmux,"xterm-256color"y establecer explícitamente el fondo también lo hizo por mí. ¡Gracias!sttermporquexfce4-terminaltodo parecía cómodo (aparecían comentarios encyanlugar de losbluecuales 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.vimal 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
defaultesquema de color en ambos casos. Pensé que era extraño porque eldefaultesquema 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 defaultwhenTERM=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 elronesquema de colores. ¡Progreso!Encontré una respuesta a Ask Ubuntu que sugiere que cuando Vim informa que está usando el
defaultesquema de color, no necesariamente significadefault.vimsino un esquema de color específico del tema. Como señala la respuesta, un tema oscuro (que estoy usando) corresponde alronesquema 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 ronen mi~/.vimrcarchivo. 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
~/.vimrcsolució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
vimcomporta de esta manera. Después de todo, labcecapacidad no debería tener nada que ver con la cantidad de colores disponibles.bcecapacidad 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_Comuestra). 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.vimtiene 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
TERMesrxvt-unicode-256color) usando un apropiado~/.Xdefaultsy desafortunadamente aún observé diferentes colores dentro y fuera de tmux. Para el escenario gnome-terminal,COLORTERMestátruecoloryTERMCAPestá vacío tanto dentro como fuera de tmux. Para el escenario urxvt,COLORTERMestárxvt-xpmfuera ytruecolordentro de tmux, mientras queTERMCAPestá vacío tanto dentro como fuera de tmux.:help xterm-true-coloro pruebe con una configuración de Vim más predeterminada.termguicolorsen mi.vimrce:set termguicolors?informesnotermguicolorsen 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