2010-11-19 40 views
17

En zsh, j'ai une fonction appelée g qui agit comme ceci:zsh: achèvements d'utilisation pour la commande X quand je commande type Y

  • sans argument, appelez git status
  • avec un ou plusieurs arguments, déléguer à git avec tous les arguments donnés - par exemple appeler git [email protected]

Je voudrais les complétions de l'onglet pour g être exactement les mêmes que pour git. Je peux réaliser cela avec alias g=git, mais cela ne me permet pas d'appeler status par défaut (le premier point ci-dessus).

Comment puis-je déléguer à l'achèvement pour git?

En bash, j'ai simplement fait complete -F _git g qui réutilise la fonction d'achèvement de git. Avec zsh, l'achèvement de git semble beaucoup plus complexe, et je ne suis pas capable de trouver une solution similaire.

Je suppose qu'il existe une fonction dans zsh pour dire "prétendre avoir tapé la commande [x], que voulez-vous compléter?". Si je savais ce que c'était, il devrait être assez simple d'utiliser une fonction pour lui déléguer. Mais je n'ai trouvé aucune telle fonction dans les manuels.

+0

Merci pour le conseil sur la façon de le faire fonctionner à bash! –

Répondre

17

La documentation compdef dit ceci:

La fonction compdef peut être utilisé pour associer les fonctions d'achèvement existantes avec de nouvelles commandes. Par exemple,

compdef _pids foo 

mais en l'adaptant (_git est la fonction d'achèvement habituel pour git) n'a pas produit un résultat de travail pour moi (même après _git avait été auto-chargement):

compdef _git g 

J'ai pu le faire fonctionner via _dispatch cependant:

compdef '_dispatch git git' g 
+1

C'est bizarre. J'ai la même chose qui se passe, mais d'autres fonctions d'achèvement fonctionnent très bien avec la première commande. –

+1

excellent, merci beaucoup! Quant à savoir pourquoi le premier ne fonctionne pas, Peut-être que l'achèvement pour _git est suffisamment personnalisé que juste le rediriger n'est pas suffisant pour l'amener à répondre avec quelque chose d'utile? (c'est-à-dire qu'il vérifie peut-être que la commande commence par "git") – gfxmonk

+2

Une idée de comment 'compdef '_dispatch git git' g' peut être ajusté pour rendre g auto-complet comme git-status, plutôt que simplement git? –