GNU/Linux >> Linux Esercitazione >  >> Linux

Zsh:imposta Term=screen-256color in Tmux, ma Xterm-256color senza Tmux?

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"?
Linux
  1. Quali emulatori di terminale supportano la modalità di controllo Tmux?

  2. Dove viene impostato il termine Default della variabile di ambiente?

  3. Vim non funziona all'interno di Tmux?

  4. Come impostare in modo permanente il nome host in Ubuntu senza riavviare

  5. Come aggiornare un messaggio stampato nel terminale senza ristampare

Personalizzazione del mio terminale Linux con tmux e Git

Come tmux suscita gioia nel tuo terminale Linux

Supporto per Tmux, Term e 256 colori?

Variabile di ambiente TERM non impostata

tmux Ctrl+B non funziona

Imposta il colore della scheda tmux attiva