Comment faire fonctionner les compléments Git Flow pour zsh?

4

J'ai gitet git-flowinstallé via Homebrew. Je suis sur un Mac.

j'ai zsh 5.0.2 (x86_64-apple-darwin12.4.0)

gitles finitions fonctionnent. git-flowles finitions ne le sont pas.

Je ne peux pas obtenir de git flowfinitions au travail.

J'ai essayé deux manières d'installer les fonctions.

Méthode 1

J'ai installé git-flowavec Homebrew, qui a ajouté les fonctions à ce répertoire/usr/local/share/zsh/site-functions

Ce chemin est dans mon $fpath

> echo $fpath
/usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.2/share/zsh/functions

Méthode 2

J'ai téléchargé les git-flowfonctions d'achèvement à partir de https://github.com/zsh-users/zsh-completions et ai mis le fichier dans ~/.zsh/completions.

J'ai ensuite ajouté le répertoire à mon ~/.zshrc

fpath=(~/.zsh/completions $fpath)

> echo $fpath
/Users/jord/.zsh/completions /usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.2/share/zsh/functions

Aucune de ces méthodes ne fonctionne.

Qu'est-ce que je fais mal?

MISE À JOUR

La sortie de git-flow [CTRL+X] [h]est:

> git flow
tags in context :completion::complete:git::
    all-files  (_files _default _git (eval))

MISE À JOUR 2

Ça marche!

J'ai mis les _gitfonctions de l' URL fournie par @mpy dans ~/.zsh/completions/et ajouté ~/.zsh/completionsà mon $fpathin ~/.zshrc.

fpath=(
  ~/.zsh/completions
  $fpath
)

J'ai ensuite téléchargé à git-flow-completion.zshpartir de https://github.com/bobthecow/git-flow-completion et je l'ai mis dans ~/.zsh/completionsce fichier, puis je l'ai recherché .zshrc.

gitet les git flowfinitions fonctionnent maintenant, mais je ne sais pas pourquoi?!

jordelver
la source
1
Les deux méthodes devraient bien se passer. Comme cela fonctionne ici et juste pour vous assurer: avez-vous démarré une nouvelle instance de zsh après avoir inséré le fichier $fpath? Et, pouvez-vous s'il vous plaît poster la sortie de git-flow [CTRL+X] [h]?
Mpy
J'ai mis à jour mon message avec la sortie. Je suppose que cela signifie qu'il ne peut pas trouver les git-flowfinitions, seulement les gitfinitions?
Jordelver
1
J'ai écrit une réponse, bien que je n'ai pas de solution. Mais peut-être que l'une de mes idées de dépannage m'aidera - et je ne pourrais pas tout
insérer

Réponses:

2

Le fichier est $fpath/_git-flowcomplet pour git-flow(avec tiret), voir sa première ligne:

#compdef git-flow

Donc, en utilisant git-flow [CTRL+X] [h]je reçois

$ git-flow [CTRL+X] [h]
tags in context :completion::complete:git-flow::
    argument-1  (_arguments _git-flow)
tags in context :completion::complete:git-flow:argument-1:
    commands  (_describe _git-flow)

montrant que zshdétecte que l'invite est maintenant au premier argument de git-flow.

La fonction d'achèvement gitest très puissante (et pour être honnête, je ne peux pas le lire), donc aussi git flow(sans tiret) fournit l' git-flowachèvement, mais le contexte est différent:

$ git flow [CTRL+X] [h]
tags in context :completion::complete:git::
    argument-rest  (_arguments _git)
tags in context :completion::complete:git-flow::
    argument-1  (_arguments _git-flow _call_function _git)
tags in context :completion::complete:git-flow:argument-1:
    commands  (_describe _git-flow _call_function _git)

Si vous utilisez un module git non existant, je me retrouve avec

$ git foo [CTRL+X] [h]
tags in context :completion::complete:git::
    argument-rest  (_arguments _git)
tags in context :completion::complete:git-foo::
    directories    (_files _git) 
    globbed-files  (_files _git) 
    all-files      (_files _git)

qui ressemble le plus à votre résultat.

Par conséquent, mes suggestions seraient:

  • Vérifiez que votre _git-flowfichier de complétions n'est pas corrompu et qu'il a les bonnes fins de lignes (EOL)
  • déclenchez l'achèvement de git-flow avec, par exemple, git-flow [CTRL+X] [h]et regardez le résultat de which _git-flow:

    • si la fonction d'achèvement ne peut pas être lue, cela se traduit par

      $ which _git-flow
      _git-flow () {
              # undefined
              builtin autoload -XUz
      }
    • si lu correctement, vous obtenez la fonction imprimée:

      $ which _git-flow
      _git-flow () {
          local curcontext="$curcontext" state line
          typeset -A opt_args
          _arguments -C ':command:->command' '*::options:->options'
          ...
  • essayez de compiler le _git-flowfichier de fonction avec zcompile _git-flowpour voir s’il y aura une erreur. (Ensuite, le fichier résultant _git-flow.zwcdoit être lu lors du chargement automatique.)

  • examiner ~/.zcompdumpsi l' _git-flowachèvement est répertorié.
mpy
la source
Merci pour la réponse utile. Si je compile le fichier de fonction avec zcompileles finitions apparaissent, mais seulement pour git-flowpas git flow. Pourquoi est-il nécessaire de compiler les fonctions? Et comment puis-je le faire fonctionner git flow?
jordelver
1
@jordelver: Franchement, je ne sais pas pourquoi cela fonctionne une fois compilé. Cela ne devrait pas avoir d' importance. Avez-vous la version à jour de l' _gitachèvement? S'il existe une version plus ancienne, _gitquelque part dans vos $fpathaffaires, vous risquez de vous perdre. Essayez de compiler _gitaussi?!
Mpy
Si j'ai deux versions des fonctions qui ont priorité? J'ai un _gitfichier dans /usr/local/share/zsh/site-functionsAND dans /usr/local/Cellar/zsh/5.0.2/share/zsh/functions. Une fois l’installation par défaut de zsh, celle-ci est installée par le paquet git Homebrew: | Et, ils sont différents, l'un semble être uniquement du script zsh et l'autre utilise les finitions de bash: /
jordelver
1
@jordelver: Je ne sais pas ce qui se passe avec deux fichiers nommés identiques, mais cela ressemble à une source d'irritation. Essayez de déplacer les deux fichiers $fpathet de ne placer que la fonction officielle _git de sourceforge.net/p/zsh/code/ci/master/tree/Completion/Unix/… dans $fpath.
mpy
1
@jordelver Vous devez source git-flow-completion.zshprécisément parce que l'auteur a décidé de ne pas suivre la _convention. Il fonctionne toujours de la même manière, mais vous devez l’approvisionner au lieu de le déposer à un fpathemplacement donné pour permettre à Zsh de le récupérer automatiquement.
leoj
1

J'ai pensé que vous pourriez essayer ceci: https://github.com/Homebrew/homebrew-core/commit/f710a1395f44224e4bcc3518ee9c13a0dc850be1#r30789420

Vous utilisez macOS? Les autocomplétions fournies avec Homebrew git étaient en conflit avec le script git-flow autocompletions.

Essayez de supprimer le dossier zsh /usr/local/Cellar/git/x.xx.x/share/et de recharger votre zsh.

Références:
1. https://github.com/Homebrew/homebrew-core/commit/f710a1395f44224e4bcc3518ee9c13a0dc850be1
2. https://github.com/bobthecow/git-flow-completion/issues/50
3. https: // github. com / robbyrussell / oh-my-zsh / numéros / 1717

zx1986
la source