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


17

私は私が必要と$TERMするxterm-256color(zshの持つ「プレーン」の端末で)tmuxの外、しかし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。さて、ターミナルを開いたときTERMxtermであり、tmuxを実行したときTERMscreen-256colorです。で設定TERMすると.zshrc、tmuxはまずに設定さTERMscreen-256color、シェル(zsh)を実行し、zshが読み取り.zshrc、リセットTERMxterm-256colorます。

だから、どのように作るTERMことをxterm-256color「プレーン」の端末では、とscreen-256colortmuxの中に?


5
xterm構成(Xリソース)でxtermのTERMを設定し、tmux構成でtmuxのTERMを設定します。zshでこれを行う必要はありません。
ステファンシャゼル14年

うーん、しかし、他のターミナルエミュレーターも使用します。たとえば、gnome-terminalとquake-styleドロップダウンコンソール "altyo" github.com/linvinus/AltYoTERMこれらのターミナルで正しい設定方法を見つけることができません
Dmitry Frank

1
これらのアプリケーションは TERMを適切に設定する責任があります。のためにgnome-terminal、それはおそらくそうであるはずgnome-256colorです...それで、それはあなたが正しく設定する必要があるそれらのアプリケーションではなく、zshです。彼らが使用する理由xtermは、おそらく、より具体的なterminfoエントリを持たないマシンに投入するときの問題を避けるためでしょう。terminfoデータベースが網羅されたマシンにのみ接続していることがわかっている場合は、アプリケーション自体で変更できます。
ステファンシャゼル14年

.zshrcクラッジ、IMOを追加する必要がある場合は、不完全なterminfoデータベースを持つマシン上にある必要があります(xterm-256colorをxtermxterm-256colorがサポートされていない場合に置き換えますが、これらのエントリを追加することをお勧めします)独自の〜/ .terminfoデータベース)。
ステファンシャゼル14年

termは、ではなく、ターミナルエミュレータで設定する必要があり.zshrcます。それは正しい方法ではありません。
jdhao

回答:


23

TERM環境変数は、ターミナルとして機能しているアプリケーションによって設定する必要があります。これが重要なポイントです。内部で実行されているプログラムに、使用されている端末を知らせ、それによってサポートされる機能の種類を知らせます。

Zshは端末ではありません。シェルです。TERMが特別なことをしたい場合、TERMの設定を気にするかもしれませんが、それを設定する責任はありません。代わりに、ZSH_VERSIONなどの変数を設定する責任があります。ZSH_VERSIONは、スクリプトまたは他の子プロセスが親シェルにどのような動作を期待するかを理解するために使用できます。

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

xterm*termName: xterm-256color

gnome-terminalは、xtermの構成が独自のものではなく、それを読むというばかげたことをしているようです。場合によってはこれで十分かもしれませんが、gnome-256colorにもっと適切に設定する必要があります。これは、それ(および他のいくつかのVTEベースのターミナルエミュレータ)に対する長年の不満のようです。これを回避する一般的な方法は、設定する別の値を活用することです。

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

しかし、これによりtmuxの問題に戻ります。そのため、すでに "screen-256color"や "screen"のようなものである場合はTERMをリセットしないで、そのことを説明する必要があります。

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

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


zshを設定する責任はありません$SHELLloginそれを設定する責任があり、アプリケーション(、...)に希望のシェルとしてどのシェルを使用するかをアプリケーションに伝えたい場合は、それを別のものに変更する責任があります。設定といくつかの文書化された特別なシェル変数を担当しますが、には触れません。xtermvizsh$ZSH_VERSION$SHELL
ステファンシャゼル14年

@StéphaneChazelas訂正してくれてありがとう。
カレブ14年

このおかげkonsoleで、bashrcにTERMを置くのではなく、TERM をどのように設定するのかを探すようになりました。プロファイルの[全般]タブの[環境]で設定され、それを次のxtermように変更しましたxterm-256color
Mike Lippert

私のバニラdeb10 truecolorでは、gnome-terminalforの代わりにGNOMEターミナルレポートをインストールする$COLORTERMため、上記の検出メカニズムが機能しない可能性があることに注意してください。XTERMはこの値を設定しているようには見えません。任意の値を確認することが有効な場合があります。この用語タイプは他の場所でこの要点で部分的に議論されています:gist.github.com/XVilka/8346728#true-color-detection
Shaun Wilson

8

.zshrcの中に、

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

そして、.tmux.conf内

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

2
または、 [[ $TMUX != "" ]] && export TERM="screen-256color" この方法でzshはtmuxセッション内で呼び出された場合にのみTERMを設定します
-Titou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.