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í“?