Результат

Результат

я используюомыжш. Я пытаюсь загрузить разницу.темына основе текущего пути к каталогу ( pwd)

Логики

Еслипвдв или содержат подстрочную /Sites/work/нагрузку af-magic, в противном случае нагрузку 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)

Кстати, [[ "$STR" =~ .*"$SUB".* ]]это синтаксис bash, а не zsh. В zsh, заключение переменных в регулярные выражения в кавычки не отключает операторы регулярных выражений в нем.

Связанный контент