GNU/Linux >> Znalost Linux >  >> Linux

Zsh:Nastavit Term=screen-256color v Tmux, ale Xterm-256color bez Tmux?

Potřebuji svůj $TERM být xterm-256color mimo tmux (v „plain“ terminálu se zsh), ale screen-256color uvnitř tmux.

Nejprve jsem zkusil:

  • přidat export TERM='xterm-256color' na můj ~/.zshrc .
  • přidat set -g default-terminal "screen-256color" na můj ~/.tmux.conf

Nyní, když otevřu terminál (řekněme xterm), TERM je xterm-256color , což je správně. Ale když spustím tmux, TERM je opět xterm-256color !

Pak jsem se pokusil okomentovat řádek v mém ~/.zshrc . Nyní, když otevřu terminál, TERM je xterm a když spustím tmux, TERM je screen-256color . Zdá se tedy, že nastavím TERM v .zshrc , tmux nejprve nastaví TERM na screen-256color , spustí shell (což je zsh) a zsh přečte .zshrc a resetuje TERM na xterm-256color .

Jak tedy udělat TERM být xterm-256color v „plain“ terminálu a screen-256color v tmux?

Přijatá odpověď:

Proměnná prostředí TERM by měla být nastavena aplikací, která funguje jako váš terminál. To je podstata celé věci:nechat programy běžící v nich vědět, jaký terminál se používá, a tedy jaké funkce podporuje.

Zsh není terminál. Je to skořápka. Pokud chce dělat speciální věci, může mu být jedno, na co je váš TERM nastaven, ale neměl by být zodpovědný za nastavení to. Místo toho zodpovídá za nastavení proměnných, jako je ZSH_VERSION, které mohou být použity skripty nebo jinými podřízenými procesy, aby pochopily, jaké chování lze očekávat od jejich nadřazeného prostředí.

Místo toho musíte zkontrolovat konfiguraci jakékoli terminálové aplikace, kterou používáte, a požádat ji, aby se správně ohlásila. Například to můžete udělat pro xterm přidáním tohoto řádku do ~/.Xdefaults soubor, který používá pro konfigurační hodnoty:

xterm*termName: xterm-256color

Zdá se, že gnome-terminal dělá tu idiotskou věc, že ​​čte, jaká by byla vaše konfigurace xterm, místo aby ji měl vlastní. V některých případech vám to může stačit, ale správněji by to mělo být nastaveno na gnome-256color. Zdá se, že jde o dlouhodobou námitku proti němu (a některým dalším emulátorům terminálů založených na VTE). Obvyklý způsob, jak to obejít, je využít další hodnotu, kterou nastavuje:

if [ "$COLORTERM" = "gnome-terminal" ]; then
    export TERM=gnome-256color
fi 

Ale to vás přivádí zpět k vašemu problému s tmux, takže byste to museli zohlednit tím, že neresetujete TERM, pokud je již něco jako „screen-256color“ nebo „screen“:

if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
    export TERM=gnome-256color
fi

U ostatních terminálů budete muset vyhledat jejich správné konfigurační rutiny.

Související:Jak přimět Safari, aby nastavilo kMDItemWhereFroms při použití „Uložit obrázek ke stažení“?
Linux
  1. Který terminál je lepší:Bash vs Zsh

  2. Kde se nastavuje výchozí proměnná prostředí?

  3. Používání proměnných prostředí v souborech Tmux.conf?

  1. Zrušit dokončení, ale pouze dokončení, v Zsh?

  2. Jak trvale nastavit název hostitele v ubuntu bez restartu

  3. Instalovat zsh bez přístupu root?

  1. Jak tmux vyvolává radost ve vašem linuxovém terminálu

  2. Které terminálové emulátory podporují režim ovládání Tmux?

  3. Vim neběží uvnitř Tmux?