我在用着奥梅兹什。我正在尝试加载差异主题基于当前目录路径 ( pwd
)
逻辑学
如果密码在或包含 sustring /Sites/work/
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
,在正则表达式中引用变量不会禁用其中的正则表达式运算符。