Ergebnis

Ergebnis

Ich benutzeAbonnieren. Ich versuche einen Diff zu ladenThemenbasierend auf dem aktuellen Verzeichnispfad ( pwd)

Logik

WennPasswortin oder enthalten Sustring /Sites/work/laden af-magic, sonst laden robbyrussell.

.zshrc

ich habe es versucht

STR=$(pwd)
SUB='/Users/john/Sites/work'

if [[ "$STR" =~ .*"$SUB".* ]]; then
  echo "It's there."
  ZSH_THEME="af-magic"
else
    ZSH_THEME="robbyrussell"
fi

Ergebnis

es wurde immer wieder geladenrobbyrussell

Ex.

Bildbeschreibung hier eingeben

Antwort1

Wenn Sie sich ansehender oh-mein-zsh-Code, diese ZSH_THEMEVariable wird vom Initialisierungscode von oh-my-zsh verwendet, um eine Datei pro Design zu erstellen.

Wenn Sie also möchten, dass sich das Design jedes Mal ändert, wenn das aktuelle Arbeitsverzeichnis in einem bestimmten Verzeichnis landet, benötigen Sie:

  1. um diese Variable zu ändern, wenn sich das aktuelle Verzeichnis ändert
  2. Reproduzieren Sie dieselbe Beschaffung der Designdateien, wenn sich die Variable ändert.

Also so etwas wie:

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)

Übrigens [[ "$STR" =~ .*"$SUB".* ]]ist dies Bash-Syntax, nicht Zsh-Syntax. In zshwerden durch das Anführen von Variablen in regulären Ausdrücken die darin enthaltenen regulären Ausdrücke nicht deaktiviert.

verwandte Informationen