結果

結果

私は使用していますオーマイズ差分をロードしようとしていますテーマ現在のディレクトリパスに基づく ( pwd)

ロジック

もしパスワード/Sites/work/または sustring loadを含みaf-magic、そうでない場合は load robbyrussell

.zshrc

私はもう試した

STR=$(pwd)
SUB='/Users/john/Sites/work'

if [[ "$STR" =~ .*"$SUB".* ]]; then
  echo "It's there."
  ZSH_THEME="af-magic"
else
    ZSH_THEME="robbyrussell"
fi

結果

読み込みが続いたrobbyrussell

元。

ここに画像の説明を入力してください

答え1

見てみるとoh-my-zshコードこのZSH_THEME変数は、oh-my-zsh 初期化コードによってテーマごとのファイルのソースとして使用されます。

したがって、現在の作業ディレクトリが何らかのディレクトリに到達するたびにテーマを変更する場合は、次の操作が必要です。

  1. 現在のディレクトリが変更されるたびにその変数を変更する
  2. 変数が変更されたときに、テーマ ファイルの同じソースを再現します。

つまり、次のようになります。

load-omz-theme() {
  # copied and improved from oh-my-zsh
  if (( $# > 0 )) ZSH_THEME=$1
  if [[ -n $ZSH_THEME ]]; then
    if [[ -f $ZSH_CUSTOM/$ZSH_THEME.zsh-theme ]]; then
      source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
    elif [[ -f $ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme ]]; then
      source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme"
    else
      source "$ZSH/themes/$ZSH_THEME.zsh-theme"
    fi
  fi
}
adapt-theme() {
  local previous_theme=$ZSH_THEME
  case $PWD in
    ($SUB*) ZSH_THEME=af-magic;;
    (*)     ZSH_THEME=robbyrussell;;
  esac
  [[ $ZSH_THEME = $previous_theme ]] || load-omz-theme
}

chpwd_functions+=(adapt-theme)

ところで、[[ "$STR" =~ .*"$SUB".* ]]は bash 構文であり、zsh 構文ではありません。 ではzsh、正規表現内の変数を引用符で囲んでも、その中の正規表現演算子は無効になりません。

関連情報