Soporte de 256 colores para el fondo vim en tmux

98

Mientras uso vim dentro de tmux, puedo ver que el soporte de 256 colores está habilitado. con colores $ tput

Sin embargo, cambiar el esquema de colores en vim mientras está en tmux cambiará el esquema de colores por línea, pero no todo el fondo. ver captura de pantallaingrese la descripción de la imagen aquí

Aquí hay un fragmento del archivo my .vimrc, por ejemplo. Mi esquema de colores original está oscuro solarizado y luego, después de ejecutarlo: el esquema de colores molokai ya ves lo que sucede.

informacion

  • terminal de gnomo
  • golpetazo

en mi ~ / .tmux.conf

    set -g default-terminal "screen-256color"

en mi ~ / .vimrc

    set t_Co=256

en mi ~ / .bashrc

# ryan
export TERM="xterm-256color"
# ryan
alias tmux="tmux -2"

en mi perfil ~ /.

# ryan 256 color support
if [ -e /usr/share/terminfo/x/xterm-256color ]; then
    export TERM='xterm-256color'
  else
    export TERM='xterm-color'
  fi

¿Alguna idea de cómo puedo obtener un cambio completo del esquema de colores en vim? ¿Todos mis fragmentos de los archivos se ven bien?

winchendonsprings
fuente
¿Qué sucede si presionas control-l en modo normal o ejecutas el comando ": redraw"?
Heptita
@Heptite no pasa nada, el cambio de color es por línea como en la captura de pantalla
winchendonsprings

Respuestas:

75

Desde el aspecto de su .bashrc y .profile, los shells dentro de tmux están anulando la configuración de 'terminal predeterminado' en su tmux conf. Algo como esto:

  • tmux crea un nuevo shell con TERM=screen-256color
  • .bashrc / .profile run, set TERM=xterm-256color
  • vim se ejecuta, intenta usar TERM incorrecto para tmux

puedes verificar esto ejecutando

echo $TERM

en una cáscara fresca de tmux.

Tmux es relativamente exigente acerca de tener un terminal configurado correctamente. Si puede, establezca el valor del término en la configuración de gnome-terminal, no en su .bashrc. De lo contrario, rodee esos ajustes con una marca de "pantalla" o "screen-256color" TERM, y no los restablezca en ese caso.

Tmux REALMENTE quiere que el terminal esté configurado en screenoscreen-256color

bloy
fuente
55
Pues lo arreglaste. Simplemente comenté cualquier cosa en mi .bashrc y mis archivos .profile que tenían que ver con establecer el color a 256. Reiniciado tmux y vim funciona con el fondo adecuado y 256 colores habilitados. ¿Me puede decir dónde está el archivo de configuración gnome-terminal? Además, cuando dice que tmux quiere que el terminal esté configurado en 'scfeen-256color, ¿quiere decir que lo tengo en mi tmux.conf? Gracias
winchendonsprings
No tengo una máquina con gnome-terminal a mano para verificar, pero la configuración debería estar en algún lugar de la GUI, probablemente bajo 'configuración de perfil' o algo así.
bloy
55
Además, sí, deje que tmux haga lo suyo con los shells que genera. Deje la set -g default-terminal "screen-256color"línea en su tmux conf.
bloy
2
Todo lo anterior es lo que estaba buscando (asegurándome de que TERM esté correctamente configurado y no anulado en tmux), y ENTONCES tuve que usar 'tmux -2' para cargar tmux.
Phantomwhale
Intenta if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, funcionó para mí.
asimétrico
59

Como se explica aquí , deshabilite el Borrado de color de fondo (BCE) borrando la t_utopción del terminal (ejecute :set t_ut=en Vim y luego presione Control+ Lpara actualizar la pantalla del terminal) para que los esquemas de color funcionen correctamente cuando Vim se usa dentro de la pantalla tmux y GNU.

sunaku
fuente
77
¡Esto es lo único que finalmente funcionó para mí!
Oz123
3
Terminé agregando set t_ut=a mi vimrc, lo que elimina la necesidad de usar el comando manualmente y no hay necesidad de usar <kbd> Control </kbd> + <kbd> L </kbd> ya que la sesión comienza con BCE deshabilitado.
erran
Esto es esencial cuando se usa PuTTY. Todas las combinaciones de TERM se quedan cortas cuando el esquema de colores tiene un fondo. Gran adición al hilo.
botimer
Esto funciona, sin embargo, cuando se utiliza esta solución copiar y pegar con el ratón también copia y pega los espacios finales líneas (si están resaltados.)
pelo de caballo
17

He encontrado una mejor manera en esta publicación . Puede crear un alias de tmux para tmux -2forzar a tmux a suponer que el shell está utilizando un terminal de 256 colores.

Boogy
fuente
4

Esto es lo que funcionó para mí en #Ubuntu y #Mac:

# File: ~/.bashrc (Ubuntu), ~/.bash_profile (Mac)
# for VIM and TMUC
if [ "$TERM" = "xterm" ]; then
  export TERM=xterm-256color
fi
alias tmux='tmux -2'  # for 256color
alias tmux='tmux -u'  # to get rid of unicode rendering problem

Recargar configuración:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Configure .bashrc para Mac (como lo usa tmux)

# File: ~/.bashrc (Mac)
source ~/.bash_profile

Configure la opción "terminal predeterminado" en ~ / .tmux.conf.

# File: ~/.tmux.conf
set -g default-terminal "screen-256color"  # Mac and Ubuntu
Munish
fuente
1

Una solución rápida es ejecutar lo siguiente en la terminal.

export TERM=xterm-color

Puede agregarlo a su ~/.bash_profileu otro perfil para que siempre se configure al inicio.

Peter Dietz
fuente
¡Gracias! Esto fue todo lo que necesitaba agregar a mi .zshrcpara que el modo visual fuera realmente visible.
danmcardle
1

Tuve un problema muy similar para gnome-terminal + tmux + vim pero también se extendió al problema específico de combinación de teclas:. Tuve que combinar algunas cosas juntas. antes que nada tuve que configurar mi .tmux.conf en:

# Ensure terminal starts with its own colour scheme (helps Vim/Neovim themes to not break)
set -g default-terminal "xterm-256color"
# set -g default-terminal "screen-256color" # no S-Fx keys ;-(
# and ensure the key-codes are xterm alike
set -g xterm-keys on

Luego en .vimrc:

if $COLORTERM == 'gnome-terminal'
      set t_Co=256
endif
set t_ut=

Y eso hizo el trabajo para las llaves y el fondo.

P4C
fuente
1

Si aún enfrenta problemas: noté que vim recurre al uso de la opción t_Co=8dentro de tmux incluso si $TERMestá configurado como screen-256color. Mi solución es este fragmento en vimrc:

if exists("$TMUX")
        set t_Co=256
        set notermguicolors
else
        set termguicolors
endif

La $TMUXvariable solo se llena si está dentro de una sesión tmux. En este caso, permito que vim use 256 colores. Tenga en cuenta que también desactivé termguicolors ya que tmux no admite colores verdaderos.

lgalke
fuente
0

Justo ahora enfrentaba el mismo problema. Basado en la respuesta de bloy y el contenido actual de mi ~ / .profile (en realidad, es lo mismo que winchendonsprings ') he resuelto mi problema de la siguiente manera:

~/.profile:

if [[ -z $TMUX ]]; then
    if [ -e /usr/share/terminfo/x/xterm+256color ]; then # may be xterm-256 depending on your distro
        export TERM='xterm-256color'
    else
        export TERM='xterm'
    fi
else
    if [ -e /usr/share/terminfo/s/screen-256color ]; then
        export TERM='screen-256color'
    else
        export TERM='screen'
    fi
fi

La lógica es simple: si no estamos dentro de la sesión tmux, entonces use xterm (coloreado o no). De lo contrario, lo mismo para la pantalla.

Tal vez es demasiado detallado, pero tienes la idea.

evilguc
fuente