결과

결과

나는 그것을 사용하고 있다오메지쉬. 차이점을 로드하려고 합니다.주제현재 디렉토리 경로 기준( 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

당신이 보면오-내-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".* ]]그것은 zsh 구문이 아니라 bash 구문입니다. 에서는 zsh정규식 내의 변수를 참조해도 그 안에 있는 정규식 연산자가 비활성화되지 않습니다.

관련 정보