2010-11-19 9 views
17

In zsh, ich habe eine Funktion namens g die wie folgt wirkt:zsh: Verwendung Beendigungen für Befehl X als ich Befehl type Y

  • ohne Argumente, rufen git status
  • mit einem oder mehreren Argumenten, delegieren mit allen gegebenen Argumente git - dh git [email protected]

ich die Registerkarte Fertig rufen genau wie für git die gleiche sein für g möchten. Ich kann dies mit alias g=git erreichen, aber das erlaubt mir nicht, standardmäßig status aufzurufen (der erste Punkt oben).

Wie kann ich an die Fertigstellung für git delegieren?

In bash, habe ich einfach complete -F _git g, die git die Vervollständigungsfunktion wiederverwendet. Mit zsh sieht die Fertigstellung von git viel komplexer aus, und ich könnte eine ähnliche Lösung finden.

Ich würde vermuten, dass es eine Funktion in zsh gibt, die sagt "tue so, als würde ich einen Befehl eingeben [x], womit würdest du es abschließen?". Wenn ich wüsste, was das ist, sollte es einfach genug sein, eine Funktion zu verwenden, um an sie zu delegieren. Aber ich habe keine solche Funktion in den Handbüchern gefunden. diese

+0

Vielen Dank für den Tipp, wie man es in bash arbeiten kann! –

Antwort

17

Die Dokumentation für compdef sagt:

Die Funktion compdef verwendet werden können vorhandene Abschluss Funktionen mit neuen Befehlen zu verknüpfen. Zum Beispiel

compdef _pids foo 

Aber Anpassung an (_git ist die übliche Vervollständigungsfunktion für git) hat kein Arbeitsergebnis für mich produzieren (auch nach _git automatisch geladen worden ist):

compdef _git g 

Ich konnte es über _dispatch jedoch funktionieren:

compdef '_dispatch git git' g 
+1

Das ist komisch. Ich habe das gleiche passiert, aber andere Vervollständigungsfunktionen funktionieren gut mit dem ersten Befehl. –

+1

ausgezeichnet, vielen Dank! Warum funktioniert das erste nicht? Vielleicht ist die Vervollständigung für _git ausreichend benutzerdefiniert, dass es einfach nicht ausreicht, es umzuleiten, um es mit etwas Nützlichem zu beantworten? (vielleicht prüft es, ob der Befehl mit "git" beginnt) – gfxmonk

+2

Irgendeine Idee, wie 'compdef '_dispatch git git' g 'angepasst werden kann, um g automatisch zu vervollständigen, wie git-status, anstatt nur git? –