결과

결과

나는 사용하고있다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 초기화 코드에서 테마별 파일을 소스로 사용하는 데 사용됩니다.

따라서 현재 작업 디렉토리가 일부 디렉토리에 위치할 때마다 테마가 변경되도록 하려면 다음이 필요합니다.

  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)

BTW는 [[ "$STR" =~ .*"$SUB".* ]]zsh 구문이 아닌 bash 구문입니다. 에서는 zsh정규 표현식의 변수를 인용해도 그 안에 있는 정규 표현식 연산자가 비활성화되지 않습니다.

관련 정보