zsh:tmuxではTERM = screen-256colorを設定し、tmuxではxterm-256colorを設定します。

zsh:tmuxではTERM = screen-256colorを設定し、tmuxではxterm-256colorを設定します。

$TERMtmux の外部xterm-256color(zsh がある「標準」端末) にある必要がありますが、screen-256colortmux の内部にある必要があります。

まず、次のことを試してください。

  • export TERM='xterm-256color'私のアイテムに追加してください~/.zshrc
  • set -g default-terminal "screen-256color"マイアイテムに追加~/.tmux.conf

端末(xtermなど)を開くと、TERMはいxterm-256color、そうです。しかし、tmuxを実行するとTERM再びxterm-256color

それから私をコメントアウトしてみました~/.zshrc。これで端末を開くTERMだけでxterm、tmuxを実行するだけTERMですscreen-256color。したがって、tmuxTERMで最初に設定すると、に設定され、.zshrcそれを実行するシェル(例:zsh)が読み取られ、次にzshが読み込まれてリセットされるようです。TERMscreen-256color.zshrcTERMxterm-256color

それでは、「一般」端末とtmuxでこれをどのように実行できますかTERMxterm-256colorscreen-256color

答え1

TERM環境変数は、端末として機能するアプリケーションによって設定する必要があります。これがポイントです。実行中のプログラムがどの端末が使用されているのか、そしてどのタイプの機能をサポートしているのかを知ることができるようにすることです。

Zshは端末ではありません。シェルです。特別なことをしたい場合は、TERMが何に設定されているのか興味があるかもしれませんが、責任を負うべきではありません。環境それ。代わりに、親シェルで予想される動作を学習するためにスクリプトや他の子プロセスで使用できるZSH_VERSIONなどの変数を設定することを担当します。

代わりに、使用している端末アプリケーションの構成を確認し、それ自体が正しく報告するように依頼する必要があります。たとえば、構成値に使用されるファイルに次の行を追加することで、~/.Xdefaultsxtermに対してこれを行うことができます。

xterm*termName: xterm-256color

gnome-terminal この愚かなことをしているようです。独自の構成を持つのではなく、xterm構成を読み取ることです。これは場合によっては役立ちますが、vte-256colorでより正確に設定する必要があります。これは、この製品(および他のいくつかのVTEベースのターミナルエミュレータ)について長い間苦情しているようです。 ㅏ一般的な方法この問題に対する解決策は、設定した他の値を活用することです。

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

しかし、それはtmuxの問題に戻るので、すでに「screen-256color」や「screen」のようなものであれば、TERMをリセットせずに問題を解決する必要があります。

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

他の端末の場合は、正しい構成ルーチンを見つける必要があります。

答え2

.zshrcに次のように入力します。

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

そして.tmux.confから

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

関連情報