Como obter as conclusões do fluxo do git para o zsh working?

3

Eu tenho git e git-flow instalado via Homebrew. Eu estou em um Mac.

Eu tenho zsh 5.0.2 (x86_64-apple-darwin12.4.0)

git completions estão funcionando. git-flow completions não são.

Não consigo fazer com que git flow completions funcionem.

Eu tentei duas maneiras de instalar as funções.

Método 1

Eu instalei o git-flow usando o Homebrew, que adicionou as funções a este diretório /usr/local/share/zsh/site-functions

Esse caminho está no meu $fpath

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

Método 2

Eu fiz o download das funções git-flow de conclusão do link e coloque o arquivo em ~/.zsh/completions .

Eu adicionei o diretório ao meu ~/.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

Nenhum desses métodos funciona.

O que estou fazendo de errado?

UPDATE

A saída de git-flow [CTRL+X] [h] é:

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

UPDATE 2

Está funcionando!

Eu coloquei as funções _git do URL fornecido por @ mpy em ~/.zsh/completions/ e adicionado ~/.zsh/completions ao meu $fpath em ~/.zshrc .

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

Eu então baixei git-flow-completion.zsh do link e coloquei em ~/.zsh/completions e obtive o arquivo do meu .zshrc .

git e git flow completions agora estão funcionando, mas não tenho ideia do motivo?

    
por jordelver 24.07.2013 / 23:35

1 resposta

2

O arquivo $fpath/_git-flow fornece conclusão para git-flow (com traço), veja sua primeira linha:

#compdef git-flow

Então, usando git-flow [CTRL+X] [h] , obtenho

$ 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)

mostrando que zsh detecta que o prompt agora está no primeiro argumento para git-flow .

A função de conclusão para git é muito poderosa (e para ser honesto, eu não posso, ler "it through"), então também git flow (w / o dash) fornece o git-flow conclusão, mas o contexto é diferente:

$ 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)

Se estiver usando um módulo git inexistente, acabo com

$ 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)

que parece mais próximo do seu resultado.

Portanto, minhas sugestões seriam:

  • verifique se o arquivo _git-flow completions não está corrompido e tem os endings de linha (EOL) corretos
  • conclusão do disparo para fluxo git com, e. git-flow [CTRL+X] [h] e dê uma olhada na saída de which _git-flow :

    • se a função de conclusão não puder ser lida, isso resultará em

      $ which _git-flow
      _git-flow () {
              # undefined
              builtin autoload -XUz
      }
      
    • se for lido corretamente, você obtém a função impressa:

      $ which _git-flow
      _git-flow () {
          local curcontext="$curcontext" state line
          typeset -A opt_args
          _arguments -C ':command:->command' '*::options:->options'
          ...
      
  • tente compilar o arquivo de função _git-flow com zcompile _git-flow para ver se haverá um erro. (Em seguida, o arquivo resultante _git-flow.zwc deve ser lido no autoloading.)

  • examine ~/.zcompdump se a conclusão de _git-flow estiver listada.
por 25.07.2013 / 13:34

Tags