/ / Wechseln in ein Verzeichnis, das sich irgendwo in der Baumstruktur befindet - linux, zsh, oh-my-zsh

Wechseln in ein Verzeichnis, das sich irgendwo in der Baumstruktur befindet - linux, zsh, oh-my-zsh

Ich tippe hÀufig:

cd a/directory/I/use/a/lot

und in diesem Verzeichnis gibt es viele Ordner, die ich cd hin und her.

Gibt es eine oh-my-zsh Plugin, das folgendes erlaubt:

cd somd<TAB>

Anschließend wird automatisch eine Liste der Verzeichnisse vervollstĂ€ndigt, deren Name die Zeichenfolge enthĂ€lt somedund das sind erreichbar aus dem aktuellen Verzeichnis? Zum Beispiel angesichts der Verzeichnisstruktur

somedirX
foo/bar/somedirY
baz/somedirZ/bum

Tippen cd somed<TAB> sollte diese VervollstĂ€ndigungsliste zurĂŒckgeben

somedirX
somedirY
somedirZ

Ich konnte noch nichts finden.

Antworten:

0 fĂŒr Antwort № 1

ZunĂ€chst mĂŒssen Sie eine Funktion fĂŒr die VervollstĂ€ndigung wie folgt definieren:

_children_dirs() {
find . -type d -name "${words[CURRENT]}*" -printf "%Pn" 
| while read -r line; do
compadd -U -X "Subdirectories: " "$line"
done
compstate[insert]=menu # no expand
}

Diese Funktion kann nun als VervollstĂ€ndiger fĂŒr verwendet werden cd mit:

compdef _children_dirs cd

Ich halte es jedoch nicht fĂŒr eine gute Idee, den letzten Befehl zu verwenden. Versuchen Sie in der Tat, dies von Ihrem Home-Verzeichnis aus zu tun, und Sie werden Ihre Shell fĂŒr eine Weile einfrieren (Strg + c stoppen). Eine bessere Lösung könnte darin bestehen, dieser VervollstĂ€ndigung eine Tastenfolge zuzuweisen und sie nur dann zu verwenden, wenn sie benötigt und sicher ist:

zstyle ":completion:children-dirs:*" completer _children_dirs
zle -C children-dirs menu-complete _generic
bindkey "^Y" children-dirs

Damit, Strg + y wird auslösen children_dirs Fertigstellung.

Es gibt eine andere Lösung, die ich fĂŒr besser halte, wenn Sie bereit sind, einen anderen Befehl zu verwenden.

function ccd { cd $1 }
compdef _children_dirs ccd

Dieser Block definiert einen neuen Befehl ccd das _children_dirs_ als VervollstÀndiger verwendet (also mit TAB ausgelöst).

Sie können den Namensfilter in personalisieren finden um irgendwo im Dateinamen nach dem Muster zu suchen: "*${words[CURRENT]}*".

Bearbeiten: Ich habe eine erstellt Plugin fĂŒr zsh damit.