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"?