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.
Antwort1
Wenn Sie sich ansehender oh-mein-zsh-Code, diese ZSH_THEME
Variable 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:
- um diese Variable zu ändern, wenn sich das aktuelle Verzeichnis ändert
- 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 zsh
werden durch das Anführen von Variablen in regulären Ausdrücken die darin enthaltenen regulären Ausdrücke nicht deaktiviert.