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