zsh: imposta TERM = screen-256color in tmux, ma xterm-256color senza tmux


18

Ho bisogno che io $TERMsia xterm-256colorfuori da tmux (nel terminale "normale" con zsh), ma screen-256colordentro 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 corro tmux, TERMè di nuovo xterm-256color!

Poi ho provato a commentare la riga nel mio ~/.zshrc. Ora, quando apro il terminale, TERMè xterm, e quando eseguo tmux, lo TERMè screen-256color. Quindi sembra che se ho impostato TERMin .zshrc, tmux prima imposta TERMsu screen-256color, esegue shell (che è zsh), e zsh legge .zshrce reimposta TERMsu xterm-256color.

Quindi, come fare TERMper essere xterm-256colorin un terminale "semplice" e screen-256colorin tmux?


5
Impostare il TERM per xterm nella configurazione xterm (risorse X) e quello per tmux nella configurazione tmux. Non c'è motivo per cui dovresti fare qualcosa di simile in zsh.
Stéphane Chazelas,

Hmm, ma uso anche altri emulatori di terminali: diciamo, console gnome-terminal e console a discesa "altyo" github.com/linvinus/AltYo , non riesco ancora a trovare il modo di impostare correttamente TERMin questi terminali
Dmitry Frank

1
Bene, quelle applicazioni sono responsabili di impostare correttamente i loro TERM. Perché gnome-terminal, probabilmente dovrebbe essere gnome-256color... Quindi sono quelle applicazioni che devi configurare correttamente, no zsh. La ragione per cui usano xtermè probabilmente quella di evitare problemi quando si esegue lo sshing su macchine che non hanno le voci terminfo più specifiche. Se sai che stai solo lanciando computer con un esaustivo database terminfo, puoi e dovresti cambiarlo nelle applicazioni stesse.
Stéphane Chazelas,

E se è necessario aggiungere un .zshrc kludge, IMO, che dovrebbe trovarsi su macchine con database terminfo incompleti (per sostituire xterm-256color con xtermse xterm-256color non è supportato, anche se sarebbe ancora meglio aggiungere quelle voci nel nostro proprio ~ / .terminfo database).
Stéphane Chazelas,

Dovremmo impostare il termine nell'emulatore terminale, non in .zshrc. Non è il modo corretto.
jdhao,

Risposte:


24

La variabile d'ambiente TERM deve essere impostata dall'applicazione che funge da terminale. Questo è il punto centrale: far sapere ai programmi in esecuzione al loro interno quale terminale viene utilizzato e quindi che tipo di funzionalità supporta.

Zsh non è un terminale. È un guscio. Potrebbe interessarti a cosa è impostato il tuo TERM se desidera fare cose speciali, ma non dovrebbe essere responsabile per l' impostazione . È invece responsabile dell'impostazione di variabili come ZSH_VERSION che possono essere utilizzate da script o altri processi figlio per comprendere quale comportamento aspettarsi dalla shell madre.

Invece, è necessario controllare la configurazione per qualsiasi applicazione terminale che si sta utilizzando e chiederle di riportare correttamente se stessa. Ad esempio puoi farlo per xterm aggiungendo questa linea al ~/.Xdefaultsfile che usa per i valori di configurazione:

xterm*termName: xterm-256color

Sembra che gnome-terminal faccia la cosa idiota di leggere quale sarebbe la tua configurazione xterm invece di averne una propria. Questo potrebbe farti passare in alcuni casi, ma dovrebbe essere più correttamente impostato su gnome-256color. Questo sembra essere una lamentela di vecchia data contro di essa (e alcuni altri emulatori di terminali basati su VTE). Un modo comune per aggirare questo è 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 è necessario cercare le rispettive routine di configurazione.


zshnon è responsabile per l'impostazione $SHELL. loginè responsabile dell'impostazione e l' utente è tenuto a cambiarlo in qualcos'altro se si desidera dire alle applicazioni ( xterm, vi...) quale shell si desidera come shell preferita. zshè responsabile dell'impostazione $ZSH_VERSIONe di alcune variabili shell documentate speciali, ma non tocca $SHELL.
Stéphane Chazelas,

@ StéphaneChazelas È stato sciatto da parte mia, grazie per la correzione.
Caleb,

Grazie per questo, mi ha fatto cercare come konsoleimpostare TERM piuttosto che metterlo nel mio bashrc. L'ho trovato impostato nella scheda Generale del profilo, Ambiente, modificato da xtermaxterm-256color
Mike Lippert il

vale la pena notare che sotto il mio deb10 vanilla installare i report GNOME Terminal truecolorinvece di gnome-terminalper $COLORTERMe quindi il meccanismo di rilevamento sopra potrebbe non funzionare. XTERM non sembra impostare questo valore, potrebbe essere valido per verificare la presenza di alcun valore. questo tipo di termine è parzialmente discusso in questa sintesi
Shaun Wilson,

8

Nel tuo .zshrc, metti

[[ $TMUX = "" ]] && export TERM="xterm-256color"

E, all'interno del tuo .tmux.conf

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

2
Oppure in [[ $TMUX != "" ]] && export TERM="screen-256color" questo modo zsh imposterà TERM solo se chiamato all'interno di una sessione
tmux
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.