tmuxセッションにあるかどうかによって、zshプロンプトの色が変わりたいと思います。 Bashでは$ TMUXの値を調べることでこれを行うことができますが、zshはそれに対応する方法を見つけることができません。 zshでこれは可能ですか?
答え1
zshではprompt_subst
オプションデフォルトではオフになっています。プロンプトで変数置換を有効にするには、これをオンにします。
setopt prompt_subst
PS1='$foo'
しかし$TMUX
、これは必要ありません。この値はセッション中に変更されないため、PS1
シェルの起動時に初期化できます。
setopt prompt_subst
if (($+TMUX)); then
PS1='[tmux:${TMUX_PANE//\%/%%}] %# '
else
PS1='[not tmux] %# '
fi
気づく急速な拡張変数置換後に発生するため、変数値のパーセント記号を保護する必要があります。
答え2
起動すると、tmuxは自分自身を起動したシェルの環境変数を継承します(他のすべてのプロセスと同様)。
その時点から、tmuxは生成された擬似端末に同じ環境変数を割り当てます。重要な環境変数に加えて
$TERM
tmuxサーバーは、元のシェルによって割り当てられた値を保存します。
次の方法で照会できます。
<C-b>:display-message "$TERM"
私のシステムでは、tmuxが起動したすべての擬似端末が同様の結果を提供しますxterm-256color
。
$TERM=screen
TERM=screen-256color
私のシステムでは、tmux(vim)内で実行されているプログラムが端末の色機能を認識できるように疑似端末を設定しました。 tmuxコマンドを使用してこれを実行できます。
set -g default-terminal "screen-256color"
どちらも文字列が存在することを確認し、それに応じてプロンプトを設定できます。
~/.zshrc
if [[ $TERM == *screen* ]]; then
# you're in tmux, congratulate yourself :)
# set your tmux prompt here
else
# you're not in tmux
# set your fallback prompt here
fi