
私は使用していますオーマイズ差分をロードしようとしていますテーマ現在のディレクトリパスに基づく ( 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 初期化コードによってテーマごとのファイルのソースとして使用されます。
したがって、現在の作業ディレクトリが何らかのディレクトリに到達するたびにテーマを変更する場合は、次の操作が必要です。
- 現在のディレクトリが変更されるたびにその変数を変更する
- 変数が変更されたときに、テーマ ファイルの同じソースを再現します。
つまり、次のようになります。
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
、正規表現内の変数を引用符で囲んでも、その中の正規表現演算子は無効になりません。