나는 사용하고있다ohmyzsh. 차이점을 로드하려고 합니다.테마현재 디렉토리 경로( 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)
BTW는 [[ "$STR" =~ .*"$SUB".* ]]
zsh 구문이 아닌 bash 구문입니다. 에서는 zsh
정규 표현식의 변수를 인용해도 그 안에 있는 정규 표현식 연산자가 비활성화되지 않습니다.