web-dev-qa-db-ja.com

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

$TERMはtmuxの外側(zshを使用する「プレーン」端末)でxterm-256colorにする必要がありますが、screen-256colorはtmux内にあります。

最初に私は試しました:

  • export TERM='xterm-256color'~/.zshrcに追加します。
  • set -g default-terminal "screen-256color"~/.tmux.confに追加

これで、ターミナル(たとえば、xterm)を開くと、TERMxterm-256colorで、これは正しいです。しかし、tmuxを実行すると、TERMは再びxterm-256colorになります。

次に、~/.zshrcの行をコメント化しようとしました。これで、ターミナルを開くとTERMxtermになり、tmuxを実行するとTERMscreen-256colorになります。したがって、.zshrcTERMを設定すると、tmuxは最初にTERMscreen-256colorに設定し、シェル(zsh)を実行して、zshが.zshrcTERMxterm-256colorにリセットします。

それでは、「プレーン」ターミナルではTERMxterm-256colorに、tmuxではscreen-256colorにする方法は?

19
Dmitry Frank

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

他の端末では、適切な構成ルーチンを検索する必要があります。

24
Caleb

.zshrcの中に、

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

そして、あなたの.tmux.confの中

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