.png)
Ich habe das folgende personalisierte Theme aktiviert mit oh-my-zsh
(neueste Version von zsh
und oh-my-zsh
):
local return_code="%(?..%{$fg[red]%}%? %{$reset_color%})"
local user_host='%{$terminfo[bold]$fg[green]%}%n @ %m%{$reset_color%}'
local current_dir='%{$terminfo[bold]$fg[cyan]%} %~%{$reset_color%}'
local rvm_ruby=''
local git_branch='$(git_prompt_info)%{$reset_color%}'
PROMPT="${user_host} %D{[%a, %b %d %I:%M:%S]} ${current_dir} ${rvm_ruby} ${git_branch}
%B$%b "
RPS1="${return_code}"
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$reset_color%}"
Mir ist aufgefallen, dass in der Eingabeaufforderung, wenn ich einen Alias für ein Verzeichnis habe, der Name des Alias als mein aktuelles Verzeichnis angezeigt wird und nicht der tatsächliche Pfad. Obwohl dies eine interessante Funktion ist, würde ich sie gerne deaktivieren.
Ich bin relativ neu bei oh-my-zsh
und bin nicht sicher, ob dies eine oh-my-zsh
oder zsh
Funktion ist, aber wie kann ich sie deaktivieren?
Antwort1
DerEingabeaufforderungs-Escapesequenz %~
(included in $current_dir
) expandiert zum aktuellen Verzeichnis und berücksichtigt dabei Abkürzungen. Die Abkürzungen lauten:
~
für Ihr Home-Verzeichnis;~joe
für das Home-Verzeichnis des Benutzersjoe
;~foo
für ein benanntes Verzeichnis: das Verzeichnis, demfoo
mithash -d foo=…
; ein Alias zugewiesen wurde.~[bar]
Für eindynamisches benanntes Verzeichnis.
Sie können %/
anstelle von verwenden %~
. Dabei werden niemals Verzeichnisabkürzungen verwendet.
Wenn Sie es etwas raffinierter haben möchten, können Sie Ihren eigenen Code ausführen, um zu bestimmen, wie das aktuelle Verzeichnis angezeigt wird. Ein Ansatz besteht darin, eine Parametersubstitution innerhalb der Eingabeaufforderungszeichenfolge zu verwenden. Dies erfordert dieprompt_subst
Option gesetzt werden, was oh-my-zsh tut (sonst: setopt prompt_subst
). Das aktuelle Verzeichnis ist immer im Parameter verfügbarPWD
. Hier ist eine einfache Version, die Ihr Home-Verzeichnis nur auf Folgendes verkürzt ~
:
local current_dir='%{$terminfo[bold]$fg[cyan]%} ${${PWD/#%$HOME/~}/#$HOME\//~/}%{$reset_color%}'
${${PWD/#%$HOME/\~}/#$HOME\//\~/}
bedeutet: wenn $PWD
genau gleich ist wie $HOME
, dann setze das Ergebnis auf ~
, andernfalls setze das Ergebnis auf $PWD
; dann, wenn das aktuelle Ergebnis mit beginnt $HOME/
, dann ersetze dieses Präfix durch ~/
, andernfalls lasse das Ergebnis unverändert.
Ein klarerer Ansatz besteht darin, einen Parameter zu pflegen, der eine schön gedruckte Version des aktuellen Verzeichnisses enthält. Aktualisieren Sie diesen Parameter imchpwd
Hook-Funktion, die bei jedem aktuellen Verzeichniswechsel ausgeführt wird. Initialisieren Sie diesen Parameter auch in Ihrem .zshrc
.
Es gibt nur eine chpwd
Funktion, überschreiben Sie also nicht die von oh-my-zsh. Oh-my-zsh chpwd
ruft die Funktion im Array auf chpwd_functions
, fügen Sie also Ihre zum Array hinzu.
function my_update_pretty_PWD {
case $PWD in
$HOME(/*)#) pretty_PWD=\~${PWD#$HOME};;
*) pretty_PWD=$PWD;;
esac
}
chpwd_functions+=(my_update_pretty_PWD)
my_update_pretty_PWD
local current_dir='%{$terminfo[bold]$fg[cyan]%} ${pretty_PWD}%{$reset_color%}'
Wenn Sie die Home-Verzeichnisse der Benutzer abkürzen möchten, aber nicht die benannten Verzeichnisse, können Sie die Home-Verzeichnisse in einer Subshell löschen und den%
Parametererweiterungsflagum die automatischen Abkürzungen in der Subshell durchzuführen.
function my_update_pretty_PWD {
pretty_PWD=$(hash -rd; print -lr -- ${(%)PWD})
}
Oder wenn Sie den Inline-Ansatz bevorzugen:
local current_dir='%{$terminfo[bold]$fg[cyan]%} $(hash -rd; print -lr -- ${(%)PWD})%{$reset_color%}'
Antwort2
Die auto_name_dirs
Option ist für dieses Verhalten verantwortlich.
Verwenden Sie den Befehl unsetopt auto_name_dirs
, um es zu deaktivieren.