zsh: defina TERM=screen-256color no tmux, mas xterm-256color sem tmux

zsh: defina TERM=screen-256color no tmux, mas xterm-256color sem tmux

Eu preciso $TERMestar xterm-256colorfora do tmux (no terminal "simples" com zsh), mas screen-256colordentro do tmux.

Primeiro eu tentei:

  • adicione export TERM='xterm-256color'ao meu ~/.zshrc.
  • adicionar set -g default-terminal "screen-256color"ao meu~/.tmux.conf

Agora, quando abro o terminal (digamos, xterm), TERMé xterm-256color, o que está correto. Mas quando executo o tmux, TERMé de novo xterm-256color!

Então tentei comentar a linha no meu arquivo ~/.zshrc. Agora, quando abro o terminal, TERMis xterme quando executo o tmux, TERMis screen-256color. Parece que se eu definir TERMno .zshrc, o tmux primeiro define TERMcomo screen-256color, executa o shell (que é zsh) e o zsh lê .zshrce redefine TERMpara xterm-256color.

Então, como fazer TERMpara estar xterm-256colorno terminal "simples" e screen-256colorno tmux?

Responder1

A variável de ambiente TERM deve ser definida pelo aplicativo que atua como seu terminal. Este é o objetivo: permitir que os programas executados neles saibam qual terminal está sendo usado e, portanto, que tipo de recursos ele suporta.

Zsh não é um terminal. É uma concha. Ele pode se importar com a definição do seu TERM se quiser fazer coisas especiais, mas não deve ser responsável porcontextoisto. Em vez disso, ele é responsável por definir variáveis ​​como ZSH_VERSION que podem ser usadas por scripts ou outros processos filhos para entender qual comportamento esperar de seu shell pai.

Em vez disso, você precisa verificar a configuração de qualquer aplicativo de terminal que estiver usando e solicitar que ele se reporte corretamente. Por exemplo, você pode fazer isso para o xterm adicionando esta linha ao ~/.Xdefaultsarquivo que ele usa para valores de configuração:

xterm*termName: xterm-256color

Parece que o gnome-terminal faz a coisa idiota de ler qual seria a sua configuração do xterm em vez de ter a sua própria. Isso pode ajudá-lo em alguns casos, mas deve ser definido mais corretamente como vte-256color. Esta parece ser uma reclamação de longa data contra ele (e alguns outros emuladores de terminal baseados em VTE). Amaneira comumcontornar isso é explorar outro valor que ele define:

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

Mas isso traz de volta ao seu problema com o tmux, então você teria que levar em conta isso não redefinindo TERM se já for algo como "screen-256color" ou "screen":

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

Para outros terminais você precisará procurar suas rotinas de configuração adequadas.

Responder2

Dentro do seu .zshrc, coloque

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

E, dentro do seu .tmux.conf

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

informação relacionada