$TERM
はtmuxの外側(zshを使用する「プレーン」端末)でxterm-256color
にする必要がありますが、screen-256color
はtmux内にあります。
最初に私は試しました:
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
になります。したがって、.zshrc
にTERM
を設定すると、tmuxは最初にTERM
をscreen-256color
に設定し、シェル(zsh)を実行して、zshが.zshrc
とTERM
をxterm-256color
にリセットします。
それでは、「プレーン」ターミナルではTERM
をxterm-256color
に、tmuxではscreen-256color
にする方法は?
TERM環境変数は、端末として機能しているアプリケーションによって設定される必要があります。これが肝心なのは、その中で実行されているプログラムに、使用されている端末、およびそれがサポートする機能の種類を知らせることです。
Zshはターミナルではありません。シェルです。それは特別なことをしたいならあなたのTERMが何に設定されているかを気にするかもしれませんが、それはsettingを担当すべきではありません。代わりに、ZSH_VERSIONなどの変数を設定して、スクリプトや他の子プロセスが親シェルに期待する動作を理解するために使用できます。
代わりに、使用しているターミナルアプリケーションの構成を確認し、適切に報告するように要求する必要があります。たとえば、設定値に使用する~/.Xdefaults
ファイルに次の行を追加することで、xtermに対してこれを行うことができます。
xterm*termName: xterm-256color
Gnome-terminalは、独自のxterm構成ではなく、xterm構成を読み取るというばかげた動作をするようです。場合によってはこれでうまくいくかもしれませんが、より適切にgnome-256colorに設定する必要があります。これはそれ(そして他のいくつかのVTEベースの端末エミュレータ)に対する長年の不満のようです。これをハッキングする 一般的な方法 は、設定する別の値を利用します。
if [ "$COLORTERM" = "gnome-terminal" ]; then
export TERM=gnome-256color
fi
しかし、これはtmuxの問題に戻るので、TERMが「screen-256color」または「screen」のようなものである場合は、TERMをリセットしないことでそれを考慮する必要があります。
if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
export TERM=gnome-256color
fi
他の端末では、適切な構成ルーチンを検索する必要があります。
.zshrcの中に、
[[ $TMUX = "" ]] && export TERM="xterm-256color"
そして、あなたの.tmux.confの中
set -g default-terminal "screen-256color"