環境変数の値に基づいて zsh プロンプトの書式を指定します。

環境変数の値に基づいて zsh プロンプトの書式を指定します。

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

関連情報