Ho bisogno del mio $TERM
essere xterm-256color
al di fuori di tmux (nel terminale "normale" con zsh), ma screen-256color
dentro tmux.
Per prima cosa ho provato:
- aggiungi
export TERM='xterm-256color'
al mio~/.zshrc
. - aggiungi
set -g default-terminal "screen-256color"
al mio~/.tmux.conf
Ora, quando apro il terminale (diciamo, xterm), TERM
è xterm-256color
, che è corretto. Ma quando eseguo tmux, TERM
è di nuovo xterm-256color
!
Quindi ho provato a commentare la riga nel mio ~/.zshrc
. Ora, quando apro il terminale, TERM
è xterm
e quando eseguo tmux, TERM
è screen-256color
. Quindi sembra se imposto TERM
nel .zshrc
, tmux imposta innanzitutto TERM
a screen-256color
, esegue shell (che è zsh) e zsh legge .zshrc
e reimposta TERM
a xterm-256color
.
Quindi, come creare TERM
essere xterm-256color
nel terminale "normale" e screen-256color
in tmux?
Risposta accettata:
La variabile d'ambiente TERM dovrebbe essere impostata dall'applicazione che funge da terminale. Questo è il punto centrale della cosa:consentire ai programmi in esecuzione al loro interno di sapere quale terminale viene utilizzato e quindi che tipo di funzionalità supporta.
Zsh non è un terminale. È una conchiglia. Potrebbe interessare a cosa è impostato il tuo TERM se vuole fare cose speciali, ma non dovrebbe essere responsabile dell'impostazione esso. È invece responsabile dell'impostazione di variabili come ZSH_VERSION che possono essere utilizzate da script o altri processi figlio per capire quale comportamento aspettarsi dalla loro shell madre.
Invece, devi controllare la configurazione per qualsiasi applicazione terminale che stai utilizzando e chiederle di segnalarsi correttamente. Ad esempio, puoi farlo per xterm aggiungendo questa riga a ~/.Xdefaults
file che utilizza per i valori di configurazione:
xterm*termName: xterm-256color
Sembra che gnome-terminal faccia l'idiota di leggere quale sarebbe la tua configurazione di xterm invece di averla. Questo potrebbe farti passare in alcuni casi, ma dovrebbe essere più correttamente impostato su gnome-256color. Questa sembra essere una lamentela di lunga data contro di esso (e alcuni altri emulatori di terminale basati su VTE). Un modo comune per aggirare questo problema è sfruttare un altro valore che imposta:
if [ "$COLORTERM" = "gnome-terminal" ]; then
export TERM=gnome-256color
fi
Ma questo ti riporta al tuo problema con tmux, quindi dovresti tenerne conto non ripristinando TERM se è già qualcosa come "screen-256color" o "screen":
if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
export TERM=gnome-256color
fi
Per altri terminali dovrai cercare le loro corrette routine di configurazione.
Correlati:come ottenere Safari per impostare kMDItemWhereFroms quando si utilizza "Salva immagine nei download"?