In zsh
mache ich oft:
cd /path/to/somefile(:h)
( h
für head
).
Wenn somefile
es sich um einen Symlink handelt, können Sie auch Folgendes tun:
cd somefile(:A:h)
Um zu dem Verzeichnis zu gelangen, in dem sich das Ziel des Symlinks befindet.
Das zsh
Äquivalent zu Chris 'jetzt bash
einziger Lösung wäre:
cd() {
[[ ! -e $argv[-1] ]] || [[ -d $argv[-1] ]] || argv[-1]=${argv[-1]%/*}
builtin cd "$@"
}
In zsh
können Sie auch neu definieren, welche "Wörter" Ctrl-Wentfernt werden.
In zsh
"Wörter" im Kontext der wortbasierten Widgets zum Verschieben / Transponieren / Löschen sind Sequenzen von Alnums plus die Zeichen in der $WORDCHARS
Variablen, die standardmäßig enthalten sind /
.
Sie könnten entfernen /
aus , $WORDCHARS
so dass Ctrl-Wnur löscht eine Pfadkomponente:
WORDCHARS=${WORDCHARS/\/}
Eine weitere nützliche Erweiterung ist das select-word-style
Widget, mit dem Sie interaktiv zwischen verschiedenen Wortstilen wählen können.
autoload select-word-style
zle -N select-word-style
bindkey '\ew' select-word-style
Durch Drücken von Alt-Wkönnen Sie zwischen verschiedenen Wortstilen wählen.
$ cd /blah/blih<Alt-W>
Word styles (hit return for more detail):
(b)ash (n)ormal (s)hell (w)hitespace (d)efault (q)uit
(B), (N), (S), (W) as above with subword matching
?
zsh
und Wortstile. Danke auch für denzsh
Befehl. Es macht den Job perfekt.Ich gehe davon aus, dass Sie die ursprüngliche Funktionalität beibehalten möchten, wenn Sie ein Verzeichnis eingeben und verwenden
bash
.Wenn Sie niemals die Optionen von cd (
-P
usw.) verwenden, reicht dies auch aus:quelle
builtin
vor dencd
Aufrufen hinzufügencd
Optionen beibehält, funktioniert nicht mitzsh
. Das einfachere funktioniert gutzsh
, ABERcd
ist nicht mehr gleichbedeutend mitcd ~
: /[ -z "$1" ]
ausreichend. Ich habe Stephanes Antwort akzeptiert, um sie sichtbarer zu machen, da sie die beste Lösung für zu sein scheintzsh
.Sie können
dirname
den Dateinamen aus dem Pfad entfernen, zSiehe
man dirname
.quelle
Wenn Sie dies zu Ihrem hinzufügen
.profile
, es dann laden (source ~/.profile
oder sich abmelden und erneut anmelden), gelangenmycd [file or directory]
Sie in das richtige Verzeichnis:Wenn Sie es nennen
cd
, werden seltsame Dinge passieren.quelle
zsh
.cd
, wie-P
.quelle
$(sudo reboot)
kann diese Funktion das System neu starten. Auch der Benutzer verwendetzsh
nichtbash
.cd '$(sudo reboot)'
würde das Verzeichnis wechseln, während Ihre Funktion versuchen würde, den Namen auszuwerten.