perder vim colorscheme en modo tmux


228

Estoy ejecutando iterm2 y cuando estoy en modo tmux, el esquema de colores que configuré en vim no aparece. Solo el esquema de color que he establecido en iterm. Si ejecuto vim desde shell, el esquema de colores parece correcto, solo cuando estoy en modo tmux.

Intenté configurarlo :colorscheme molokaien vim (vea la captura de pantalla a continuación) y no cambia; nuevamente, el esquema de colores predeterminado para iterm2 permanece.

¿Me falta alguna configuración para iterm o tmux.conf? Mis dotfles están en github aquí.


31
¿Qué pasa cuando lo haces $ tmux -2?
romainl

44
Eso fue todo. ¿Qué es la bandera -2?
Tristen

11
Obliga a tmux a trabajar con 256 colores.
romainl

Respuestas:


252

Yo tuve el mismo problema. La única diferencia fue que estoy usando en solarizelugar de eso molokai.

Para solucionar el problema, he configurado un alias en ~/.bashrc:

alias tmux="TERM=screen-256color-bce tmux"

Y configure la default-terminalopción en ~/.tmux.conf:

set -g default-terminal "xterm"

Por último, haz $ source ~/.bashrcpara cargar un nuevo alias.


20
Yo uso esto en lugar de tmux -2ya que esto es más detallado.
thameera

97
Personalmente, tuve que usar set -g default-terminal "screen-256color"para trabajar en lugar de xtermen OS X, metido en una caja de Ubuntu. Me referí a este sitio: rhnh.net/2011/08/20/vim-and-tmux-on-osx
waffl

77
El alias aquí no tiene sentido: finge a tmux que se está ejecutando dentro de la pantalla o tmux, lo cual casi nunca es el caso. Para decirle a tmux que asuma que el terminal en el que se ejecuta admite 256 colores, ejecute tmux -2o tmux -2 attach(tmux decide cada vez que conecta una sesión nueva o existente a un terminal). Un alias sensato sería alias tmux='tmux -2'. Ver también tmux, TERM y soporte de 256 colores
Gilles 'SO- deja de ser malvado'

3
Leí en alguna otra respuesta (no pude encontrar la referencia) que no era una buena práctica forzar el TÉRMINO, aunque no estoy seguro. Dado que la tmux -2opción con el set -g default-terminal "screen-256color"funcionó para mí, esa será mi elección. ¡Pero gracias de todos modos!
marcelocra

55
Si la .tmux.confconfiguración no parece tener efecto, cierre todos los procesos tmux y reinicie. Puede hacerlo set -g default-terminal "screen-256color"sin establecer ningún alias .bashrc. Creo que las personas están haciendo soluciones alternativas como el alias de la variable de entorno porque no están cerrando todos los procesos tmux después de la configuración .tmux.conf.
Chev

74

Como @romainl menciona anteriormente, necesitaba forzar a tmux a usar 256 colores agregando la -2bandera:

$ tmux -2

He añadido alias tmux='tmux -2'a mi bash_profile, así, no me olvido :)


En realidad, no es obligatorio en absoluto: no lo uso, -2pero tengo 256 colores trabajando en Vim en tmux.
romainl

@romainl Es necesario si tmux no detecta que su terminal tiene 256 colores, lo cual es bastante común.
Gilles 'SO- deja de ser malvado'

1
@Gilles, Vim no detecta que el terminal admite 256 colores porque el valor predeterminado de tmux TERMes screen. -2no cambia TERMy no cambia nada relacionado con el color con la información que Vim obtiene de su entorno: :echo &t_Coaún regresa 8. Con la información que se proporciona, Vim hace lo correcto. Las únicas cosas que se deben establecer son: 1. de su emulador de terminal TERMa xterm-256colorun valor equivalente o igual que urxvt-unicode-256colory por defecto de 2. tmux TERMcon set -g default-terminal "screen-256color".
romainl

@romainl La mayoría de los entornos tienen TERM configurado como xtermno xterm-256color, de ahí la necesidad de ejecutarse tmux -2( TERM=xterm-256color tmuxo cambiar la tapa de término u otras formas de lograr lo mismo).
Gilles 'SO- deja de ser malvado'

1
@Gilles, el problema es que -2 no logra nada que tenga ningún impacto en el comportamiento de Vim con respecto a la compatibilidad con 256 colores porque lo único que le importa a Vim es su TERM y que se configurará en su extremo de la cadena: en su emulador de terminal Si utiliza SSH a través de 5 hosts y su terminal está configurada correctamente, Vim lanzado en el 5 ° host verá su TERM de 256 colores y actuará en consecuencia. Si usa tmux en cualquier punto de la cadena -2 tendrá un impacto cero en el comportamiento de Vim porque todo lo que ve es que su entorno está limitado a 8 colores debido al TERM predeterminado de tmux: pantalla, -2 o no.
romainl

72

Probé todas las soluciones anteriores y lo que finalmente funcionó para mí es poner las siguientes líneas .tmux.conf:

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

Estoy usando tmux a través de SSH y esto también es lo que funcionó para mí, aunque no estoy usando xterm, solo SSH normal.
armen.shimoon

No lo estaba usando sobre ssh y esta fue la única respuesta que funcionó para mí. Sesión iTerm local en OSX 10.9.5.
Chev

Esto funciona para mí (MacOS Mojave + iTerm2 / Alacritty), gracias
Adrian Magdas

31

Acabo de descubrir por qué estaba teniendo tanta confusión. Yo, como otros aquí, estaba teniendo dificultades para que la configuración del terminal predeterminado surta efecto. Recordé que tenía una sesión tmux en segundo plano. Volví a adjuntar mi sesión, cerré mis procesos y cerré TODOS los procesos de tmux. La próxima vez que reinicié tmux, la configuración predeterminada del terminal .tmux.confcomenzó a surtir efecto. No sé si otros también lo están haciendo, pero recomiendo cerrar todos los procesos tmux antes de modificar el .tmux.confarchivo.

Tengo mi disposición a trabajar en mi máquina local (OSX 10.9.5 con iTerm2) sin ninguna modificación a .bashrco .bash_profile. Todo lo que hice fue poner la línea set -g default-terminal "xterm-256color"a ~/.tmux.confy reiniciar todos los procesos TMux.

Obtuve mi configuración remota (ssh a Ubuntu 14.04) para que funcione exactamente de la misma manera sin modificaciones .bashrc. Simplemente agregué set -g default-terminal "xterm-256color"a ~/.tmux.confmi máquina remota y reinicié todos los procesos remotos de tmux.

Puede probar lo que Vim está viendo haciendo echo $TERMdesde una sesión tmux. Siguió diciendo screencomo el valor hasta que reinicié todos los procesos tmux, momento en el que reflejóxterm-256color como se esperaba.

Espero que ayude.


1
He confirmado en varios sistemas operativos más desde esta publicación, cerrar todos los procesos y configurar la default-terminalopción .tmux.confha funcionado el 100% del tiempo hasta ahora.
Chev

2
¡yo también! Hubiera gastado menos tiempo en esto si esta respuesta estuviera más arriba.
Sigfried

21

Esto es un poco obsoleto, pero vale la pena mencionar que el uso de la pantalla a menudo rompe las teclas Inicio y Fin. Utilizando

export TERM="xterm-256color"

debe mantener la funcionalidad de estos y permitir que el esquema de color (o línea de alimentación) funcione bien.


Gracias por señalar esto. No lo sabia. Todavía parece funcionar para Debian derv por lo que he visto hasta ahora. En mi defensa, la publicación hacía referencia a OSX.
Jpatrick

tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 export TERM = "xterm-256color" en .bash_profile, luego configúrelo en xterm-256-color funcionó para mí. No es necesario establecer ninguna configuración de tmux.
agenteo

14

Necesitaba vim para mostrar correctamente con tmux en la terminal en ubuntu y cygwin / mintty en windows. Lo hice funcionar combinando las respuestas como esta.

En .bashrc:

alias tmux="tmux -2"

En .vimrc:

" use 256 colors in terminal
if !has("gui_running")
    set t_Co=256
    set term=screen-256color
endif

" fix cursor display in cygwin
if has("win32unix")
    let &t_ti.="\e[1 q"
    let &t_SI.="\e[5 q"
    let &t_EI.="\e[1 q"
    let &t_te.="\e[0 q"
endif

basado en las respuestas de esta pregunta, esta página wiki de Vim y esta pregunta de cursor de bloque


Tuve el problema con mintty, y agregar la configuración de vim me lo solucionó. Ni siquiera necesitaba hacer el tmuxalias.
trigoman

@trigoman, lo mismo para mí, solo tuve que actualizar el .vimrc.
Masood Alam

Intenté todas las sugerencias anteriores. Acabo de agregar set t_Co=256a .vimrc y se corrigió. No necesitaba crear un tmuxalias.
Mike

11

He intentado todas las instrucciones anteriores y descubrí que lo más importante es que tengo que agregar explícitamente la siguiente línea en mi archivo .bashrc.

export TERM=screen-256color

No sé por qué alias tmux = "TERM = screen-256color-bce tmux" no funciona. Yo uso Sierra 10.12.1.


Esto es lo que funcionó para mí. Simplemente exportación simple de TERM. +1
markovchain

10

En caso de que alguien necesite soporte de color de 24 bits:

Tmux admite color de 24 bits a partir de la versión 2.2. Si su terminal admite color de 24 bits, agregue su terminal a la configuración de anulación de terminal. Por ejemplo,

set -ga terminal-overrides ",xterm-256color:Tc"

Lista de verificación de mi entorno:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (el tipo de terminal de informe es xterm-256color )
  • neovim 0.1.7 (Habilite el color de 24 bits agregando: xterm-256colora.vimrc )
  • tmux 2.3 (Agregar set -ga terminal-overrides ",xterm-256color:Tc"a .tmux.conf)

Nada más necesito agregar .bashrco .zshrc.

Espero que esto pueda ayudar.


Lo único que funcionó para mí. ¿Qué hace esto exactamente?
volk

6

Dado que este es el primer resultado en Google y ninguno de los anteriores ayudó ... quería publicar esto para que alguien pueda encontrarlo útil

en .vimrc:

set background=dark
set t_Co=256

HTH


He probado estas dos líneas y funcionan bien para mi Vim en WSL-Windows10.
llinfeng

1
Muchas gracias. Esto funcionó en Ubuntu 18 con gnome-terminal
Roymunson

4

Agregar la siguiente línea en .tmux.conf funcionó para mí con macOS Sierra 10.12.6,

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


Igual que aquí. ¡Gracias @waffl por encontrar esta solución!
Adam Erickson

3

Si te encuentras en la misma situación que yo, que nada de lo anterior funcionó ... prueba esto:

en .tmux.conf:

set -g default-terminal "xterm"

en bash config (quizás .bashrco .bash_profile):

alias tmux="tmux -2"

y luego ejecuta:

killall tmux

y luego relanzar tmux


3

Si usa tmuxinatoro mux, deberá agregarlos en .bashrco .zshrc:

alias tmux='TERM=screen-256color tmux -2'
alias tmuxinator='TERM=screen-256color tmuxinator'
alias mux='TERM=screen-256color mux'

Estas fuerzas para usar 256 colores en la terminal.

Entonces tmux, tmuxinatory el muxcomando funcionará.


2

Para configurar el color correcto y deshacerse del problema de renderizado en Ubuntu y Mac:

Mira esto


2

Solo tuve que lidiar con este problema, y ​​aunque todas las respuestas publicadas anteriormente fueron útiles, no resolvieron el problema en mi caso.

Mi problema se solucionó eliminando la siguiente línea en mi .vimrc:

set termguicolors

que era redondo con otra instrucción de todos modos.

Ahora, con la siguiente línea encontrada en respuestas anteriores en mi .tmux.conf:

export TERM="screen-256color"

Todo es bonito y colorido.


2

He eliminado la línea set termguicolors, pero no funciona. Poner set notermguicolorsen cambio en las .vimrcobras.


1

Desde la página de manual de tmux, agregue la bandera de la siguiente manera:

tmux -2

Esta -2bandera obliga a tmux a ejecutarse en modo de 256 colores.

Esto funciona para mi


1

No tuve mucha suerte tratando de exportar un TERMterminal predeterminado diferente o configurado en mi.tmux.conf .

Mi solución para arreglar los colores vim dentro de tmux fue agregar esta línea a .tmux.conf:

set -g terminal-overrides 'xterm:colors=88'

No estoy seguro de por qué se necesitaba esta anulación dado que yo TERM=xtermy yo también tenemos iTerm configurado en xterm, pero parece funcionar.


0

Estoy usando Ubuntu bionic 18.04.4 LTS y tmux 2.6. Tengo el mismo problema y se puede resolver simplemente agregando esto a .bashrc

export TERM=screen-256color

Y, por supuesto, no olvides buscarlo. source ~/.bashrc

O simplemente reinicie su terminal

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.