Zuerst müssen Sie eine Funktion für die Fertigstellung definieren:
_children_dirs() { find . -type d -name "$*" -printf "%P\n" \ | while read -r line; do compadd -U -X "Subdirectories: " "$line" done compstate[insert]=menu # no expand }
Diese Funktion kann jetzt als Ergänzung für cd
Folgendes verwendet werden:
compdef _children_dirs cd
Ich denke jedoch nicht, dass es eine gute Idee ist, den letzten Befehl zu verwenden. Versuchen Sie dies in Ihrem Home-Verzeichnis, und Sie werden Ihre Shell für eine Weile einfrieren ( Strg + c zum Stoppen). Eine bessere Lösung könnte sein, diesem Abschluss eine Schlüsselsequenz zuzuweisen und sie nur dann zu verwenden, wenn sie benötigt wird und sicher ist:
zstyle ':completion:children-dirs:*' completer _children_dirs zle -C children-dirs menu-complete _generic bindkey '^Y' children-dirs
Mit diesem Befehl wird durch Drücken von Strg + y die Vollendung von children_dirs ausgelöst .
Es gibt eine andere Lösung, die meiner Meinung nach besser ist, wenn Sie bereit sind, einen anderen Befehl zu verwenden.
function ccd { cd $1 } compdef _children_dirs ccd
Dieser Block definiert einen neuen Befehl ccd, der _ \ children_dirs_ als Vervollständiger verwendet (also mit TAB ausgelöst).
Sie können den Namen Filter personalisieren finden mit für das Muster überall im Dateinamen suchen: "*$*"
.
Edit: Ich habe ein Plugin für zsh damit erstellt.