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

1947
nifty

Ich habe ein Verzeichnis, in das ich alle meine Projekte einfügte. Nehmen wir an, es ist ~/projectsein Beispiel. Ich habe einen Befehl gemacht, sder ein Argument enthält und mich in dieses Verzeichnis verschiebt. ZB: s foobewegt mich zu ~/projects/foo.

Was ich gerne hätte, wäre ein gewisser Abschlussbefehl, der so wirken würde, cddass ich weiter versuchen könnte tab, weiter in die ~/projects/...Verzeichnisse zu gehen .

Grundsätzlich cdmit einem Vorsatz, der immer vorhanden ist.

Ich habe in Zstyle Completion nachgesehen man zshcompsys, erkannte aber, dass ich nicht genug davon weiß, um es richtig zu verstehen.

6

4 Antworten auf die Frage

7
Matthew Scharley

Hier ist ein Beispiel von mir.zshrc, das ich als Copy / Paste-Snippet verwende:

# 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 beiden Zeilen, dann können Sie loslegen.

Das funktioniert super, danke! Viel einfacher als ich gedacht hätte. nifty vor 12 Jahren 0
2
Gilles

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

setopt auto_cd alias -d s=~/projects 

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

1
wjv

Sie können einen Eintrag direkt zur benannten Verzeichnis-Hash-Tabelle hinzufügen:

hash -d s="$/projects" 

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

Wenn Sie die autocdOption zsh eingestellt haben, können Sie die Option weglassen cd.

0
Rafael Bugajewski

You can modify CDPATH:

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

Now you can access all subdirectories within the specified directories from every other directory as if they would be the subdirectories of the current directory:

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