Necesito $TERM
que esté xterm-256color
fuera de tmux (en la terminal "simple" con zsh), pero screen-256color
dentro de tmux.
Primero probé:
- añadir
export TERM='xterm-256color'
a mi~/.zshrc
. - agregar
set -g default-terminal "screen-256color"
a mi~/.tmux.conf
Ahora, cuando abra terminal (por ejemplo, xterm), TERM
es xterm-256color
, lo que es correcto. Pero cuando ejecuto tmux, ¡ TERM
está de nuevo xterm-256color
!
Luego traté de comentar en mi línea ~/.zshrc
. Ahora, cuando abro el terminal, TERM
es xterm
, y cuando ejecuto tmux, TERM
es screen-256color
. Por lo que parece si fijo TERM
en el .zshrc
, en primer lugar, tmux conjuntos TERM
a screen-256color
, carreras de concha (que es zsh), y zsh lee .zshrc
y se restablece TERM
a xterm-256color
.
Entonces, ¿cómo hacer TERM
para estar xterm-256color
en la terminal "simple" y screen-256color
en tmux?
TERM
estos terminalesgnome-terminal
, eso probablemente debería sergnome-256color
... Así que son esas aplicaciones las que necesitas configurar correctamente, nozsh
. La razón por la que usanxterm
es probablemente para evitar problemas al enviar ssh a máquinas que no tienen las entradas terminfo más específicas. Si sabe que solo está enviando a máquinas con una base de datos terminfo exhaustiva, entonces puede y debe cambiar eso en las propias aplicaciones.xterm
si xterm-256color s no es compatible, aunque sería aún mejor agregar esas entradas en nuestro propia base de datos ~ / .terminfo)..zshrc
. No es la forma correcta.Respuestas:
La variable de entorno TERM debe ser establecida por la aplicación que actúa como su terminal. Este es el objetivo principal: dejar que los programas que se ejecutan dentro de ellos sepan qué terminal se está utilizando y, por lo tanto, qué tipo de características admite.
Zsh no es una terminal. Es una concha. Puede que le importe en qué está configurado su TERM si quiere hacer cosas especiales, pero no debería ser responsable de configurarlo . En su lugar, es responsable de establecer variables como ZSH_VERSION que pueden ser utilizadas por los scripts u otros procesos secundarios para comprender qué comportamiento esperar de su shell principal.
En su lugar, debe verificar la configuración de cualquier aplicación de terminal que esté utilizando y pedirle que se informe correctamente. Por ejemplo, puede hacer esto para xterm agregando esta línea al
~/.Xdefaults
archivo que usa para los valores de configuración:Parece que gnome-terminal hace lo idiota de leer cuál sería su configuración xterm en lugar de tener la suya propia. Esto puede ayudarlo en algunos casos, pero debería establecerse más adecuadamente en gnome-256color. Esto parece ser una queja de larga data en su contra (y algunos otros emuladores de terminales basados en VTE). Una forma común de hackear esto es explotar otro valor que sí establece:
Pero esto lo lleva de vuelta a su problema con tmux, por lo que debería tenerlo en cuenta al no restablecer TERM si ya es algo así como "screen-256color" o "screen":
Para otros terminales, deberá buscar sus rutinas de configuración adecuadas.
fuente
zsh
No es responsable de la configuración$SHELL
.login
es responsable de configurarlo, y usted es responsable de cambiar eso a otra cosa si desea decirle a las aplicaciones (xterm
,vi
...) qué shell desea como su shell preferido.zsh
es responsable de la configuración$ZSH_VERSION
y algunas variables de shell especiales documentadas, pero no toca$SHELL
.konsole
configurar TERM en lugar de ponerlo en mi bashrc. Nos pareció que estaba situado en la ficha General del perfil, Medio ambiente, lo cambió a partirxterm
dexterm-256color
truecolor
lugar degnome-terminal
para$COLORTERM
y, por lo tanto, el mecanismo de detección anterior puede no funcionar. XTERM no parece establecer este valor en absoluto, puede ser válido verificar cualquier valor. este tipo de término se discute parcialmente en este resumen,Dentro de tu .zshrc, pon
Y, dentro de su .tmux.conf
fuente
[[ $TMUX != "" ]] && export TERM="screen-256color"
esta manera, zsh establecerá TERM solo si se llama dentro de una sesión tmux