Ich habe ein Verzeichnis, in das ich alle meine Projekte speichere. Nehmen wir ~/projects
als Beispiel an, ich habe einen Befehl namens erstellt s
, der ein Argument annimmt und mich in dieses Verzeichnis verschiebt. Beispiel: s foo
verschiebt mich nach ~/projects/foo
.
Ich hätte gerne eine Art Vervollständigungsbefehl, der es cd
mir ermöglicht, durch wiederholtes Drücken tabweiter in die ~/projects/...
Verzeichnisse zu gelangen.
Grundsätzlich cd
mit 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.zshrc
das 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/project
Abschnitt 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 ~s
es 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 ~s
auf Ihr Verzeichnis verweisen und die Tab-Vervollständigung in einem Befehl verwenden cd
: cd ~s/Tab
Wenn Sie die Option zsh autocd
festgelegt 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)