Zsh, Verzeichnis-Tab-Vervollständigung mit Präfix

Zsh, Verzeichnis-Tab-Vervollständigung mit Präfix

Ich habe ein Verzeichnis, in das ich alle meine Projekte speichere. Nehmen wir ~/projectsals Beispiel an, ich habe einen Befehl namens erstellt s, der ein Argument annimmt und mich in dieses Verzeichnis verschiebt. Beispiel: s fooverschiebt mich nach ~/projects/foo.

Ich hätte gerne eine Art Vervollständigungsbefehl, der es cdmir ermöglicht, durch wiederholtes Drücken tabweiter in die ~/projects/...Verzeichnisse zu gelangen.

Grundsätzlich cdmit einem Präfix, welches immer vorhanden ist.

Ich habe mir die Zstyle-Vervollständigung in angesehen man zshcompsys, aber festgestellt, dass ich einfach nicht genug darüber weiß, um es richtig zu verstehen.

Antwort1

Hier ist ein Beispiel ausmein eigenes.zshrcdas ich als Copy/Paste-Snippet behalte:

# Try using the below template to set up zsh functions that act
# as aliases to cd and allow you to get autocomplete nicely.

project() { cd /path/to/project/$1; }
compctl -W /path/to/project/ -/ project

Bearbeiten Sie einfach den /path/to/projectAbschnitt in den beiden Zeilen oben, dann kann es losgehen.

Antwort2

Eine andere Möglichkeit, einen ähnlichen Effekt zu erzielen, besteht darin, Aliase für Verzeichnisse zu definieren:

setopt auto_cd
alias -d s=~/projects

Geben Sie ein ~s/ Tab, um in ein Unterverzeichnis von zu wechseln ~/projects; Sie können ~ses auch in einem Befehlsargument verwenden.

Antwort3

Sie können der Hash-Tabelle des benannten Verzeichnisses direkt einen Eintrag hinzufügen:

hash -d s="${HOME}/projects"

Jetzt können Sie einfach ~sauf Ihr Verzeichnis verweisen und die Tab-Vervollständigung in einem Befehl verwenden cd: cd ~s/Tab

Wenn Sie die Option zsh autocdfestgelegt haben, können Sie das weglassen cd.

Antwort4

Sie können Folgendes ändern CDPATH:

export CDPATH="$CDPATH:$HOME/Repositories:$HOME/Repositories/jc/Projects"

Nun können Sie von jedem anderen Verzeichnis aus auf alle Unterverzeichnisse innerhalb der angegebenen Verzeichnisse zugreifen, als wären sie die Unterverzeichnisse des aktuellen Verzeichnisses:

➜  ~ /tmp
➜  /tmp pwd
/tmp
➜  /tmp MyAwesomeProject 
~/Repositories/jc/Projects/MyAwesomeProject
➜  MyAwesomeProject git:(master) pwd
/Users/rafael/Repositories/jc/Projects/MyAwesomeProject
➜  MyAwesomeProject git:(master)

verwandte Informationen