
Eu preciso $TERM
estar xterm-256color
fora do tmux (no terminal "simples" com zsh), mas screen-256color
dentro 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, TERM
is xterm
e quando executo o tmux, TERM
is screen-256color
. Parece que se eu definir TERM
no .zshrc
, o tmux primeiro define TERM
como screen-256color
, executa o shell (que é zsh) e o zsh lê .zshrc
e redefine TERM
para xterm-256color
.
Então, como fazer TERM
para estar xterm-256color
no terminal "simples" e screen-256color
no 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 ~/.Xdefaults
arquivo 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"