schemes colorscheme color bash vim colors terminal gnu-screen

bash - schemes - colorscheme vim



Extraño comportamiento del color vim dentro de la pantalla con 256 colores. (3)

Respuesta corta

Establezca TERM en xterm-256color en su .bashrc , y coloque term screen-256color en su .screenrc .

Respuesta larga

Aquí se explica por qué se rompe: gnome-terminal, screen, tmux, bash, putty y vim se han escrito para manejar 256 colores de forma inteligente, pero es necesario configurar las cosas correctamente en el punto más temprano posible. ¡Usar termcapinfo en su .screenrc es en realidad una solución de cinta adhesiva!

Si su TERM está configurado correctamente, le indicará a bash que está en modo de 256 colores, lo que significa que jugará bien con la pantalla en modo de 256 colores también.

Entonces, en tu .bashrc , export TERM=xterm-256color . [1]

En su .screenrc , use screen-256color para TERM lugar de xterm-256color , ¡y elimine el resto del cruft!

En su configuración de PuTTy, use putty-256color .

Puede descargar los archivos de entrada de termcap y ponerlos en ~/.terminfo/s y ~/.terminfo/p , si su caja no los tiene de forma predeterminada.

Notas al pie

[1] Establecer TERM en xterm-256color en tu .bashrc puede ser un poco presuntuoso, especialmente si usas el mismo .bashrc en múltiples máquinas. He encontrado que el siguiente fragmento de código es bastante efectivo:

case "$TERM" in *-256color) alias ssh=''TERM=${TERM%-256color} ssh'' ;; *) POTENTIAL_TERM=${TERM}-256color POTENTIAL_TERMINFO=${TERM:0:1}/$POTENTIAL_TERM # better to check $(toe -a | awk ''{print $1}'') maybe? BOX_TERMINFO_DIR=/usr/share/terminfo [[ -f $BOX_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && / export TERM=$POTENTIAL_TERM HOME_TERMINFO_DIR=$HOME/.terminfo [[ -f $HOME_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && / export TERM=$POTENTIAL_TERM ;; esac

El alias de ssh es una medida defensiva para evitar que intentemos abrir un terminal de 256 colores en una máquina remota que no es necesariamente compatible. El bloque principal es la otra mitad de la ecuación; comprueba si existe la entrada terminfo correspondiente, y la configura si existe.

Estaba intentando que el resaltado de sintaxis (con 256 colores) de vim funcionara dentro de la screen , que se está ejecutando dentro de gterm .

Funciona bastante bien al principio. Lo que quiero decir con "al principio" es que, después de iniciar la screen y de ingresar vim , los colores se ven bien y en realidad hay 256 colores.

Pero después de un tiempo (no sé exactamente cuánto tiempo) los colores cambian automáticamente a una apariencia como si solo hubiera 8 (¿o 16?) Colores.

Por ejemplo, después de que esto ya haya ocurrido, si ingreso el comando

hi Comment ctermfg=68

Dentro de vim , los comentarios parecen ser "puros" verdes; sin embargo, si abro otra pantalla externa (en el mismo terminal), con el mismo comando los comentarios parecen ser de color verde "amarillento".

La siguiente es mi configuración de .screenrc relacionada con el color:

attrcolor b ".I" defbce "on" termcapinfo xterm ''Co#256:AB=/E[48;5;%dm:AF=/E[38;5;%dm'' term xterm-256color

Después de ejecutar una secuencia de comandos de Python para mostrar todos los colores, descubro que tal vez este sea un problema de la pantalla en sí y no tenga nada que ver con vim.

Lo que hice es, dentro de la sesión de screen con problemas, esta secuencia de comandos da 256 colores, pero muchos de ellos son en realidad iguales; sin embargo, cuando comienzo una nueva sesión de pantalla con la misma configuración, esta secuencia de comandos proporciona 256 colores que son distintos entre sí.

Editar:

Anoche me conecté a mi computadora Linux (que está en mi oficina y siempre está encendida) con putty , luego abrí una sesión de screen con varias ventanas en ella. Los colores son correctos anoche. Luego, antes de irme a dormir, separé la sesión de screen y cerré la putty .

Ahora, por la mañana, cuando vuelvo a conectar esa sesión de screen en putty , los colores fallan: aparecen como si solo hubiera 8 colores.

Los colores están bien fuera de la screen (pero aún en putty ).

Editar:

Tres años después, después de hacer esta pregunta, hoy vi un problema similar. El problema es que vim puede mostrar 256 colores fuera de la screen , y la screen puede mostrar 256 colores con un guión de prueba, pero vim no puede mostrar ningún color dentro de la screen (solo puede mostrarse en blanco y negro). Solo como una nota para mí, aquí está el archivo .screenrc que estoy usando

hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y-%m-%d %c" shell "bash" startup_message off vbell off altscreen on attrcolor b ".I" defbce "on" termcapinfo xterm* ''is=/E[r/E[m/E[2J/E[H/E[?7h/E[?1;4;6l'' termcapinfo xterm ''Co#256:AB=/E[48;5;%dm:AF=/E[38;5;%dm'' term screen-256color

La solución al problema ya se mencionó en la respuesta aceptada, es decir, necesito incluir

export TERM=xterm-256color

en .bashrc .


En la última versión de screen (v4.99.0), no es necesario utilizar el term screen-256color en su .screenrc . Incluso sin esta configuración, el color vim dentro y fuera de la pantalla es exactamente el mismo.

Nota 1: He probado esta función en Mac OS High Sierra 10.13.4 y Ubuntu 16.04.

Se puede obtener la última versión de la pantalla utilizando git clone https://git.savannah.gnu.org/git/screen.git .

Nota 2: A diferencia de algunas de las versiones anteriores, al configuring esta versión de la pantalla no es necesario usar la opción --enable-colors256

Nota 3: Necesita tener soporte PAM para que esta configuración sea exitosa. En Ubuntu, puedes usar sudo apt-get install libpam0g-dev

Nota 4: Necesitará sudo acceso en Ubuntu mientras realiza la make install ya que este paso usa chown .


Max tiene una excelente respuesta, pero en realidad tuve que reinstalar la pantalla con ./configure --enable-colors256 para asegurar que el archivo config.h tuviera #define COLORS256 1 set, que no era el caso por defecto en mi máquina. Luego, descubrí que las otras configuraciones no eran necesarias, siempre y cuando me asegurara de que mi TERM se configurara en xterm-256color .