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