zsh: conclusão da tabulação para função com comandos do Git

5

Em zsh, estou usando o seguinte função para excluir um ramo local e um remoto com um comando:

gpDo () {
    git branch -d "$1" && git push --delete origin "$1"
}

Atualmente, o preenchimento automático da ramificação do Git não funciona. Eu tenho que digitar manualmente o nome do ramo inteiro. Como posso obter o preenchimento de tabulação para essa função?

    
por JJD 14.03.2016 / 23:52

1 resposta

3

Suponho que você esteja usando o "novo" sistema de conclusão ativado por compinit . Se você está usando oh-my-zsh, você é.

Você precisa dizer ao zsh para usar nomes de ramificações do git para gpDo . O Git já vem com uma maneira de completar os nomes das filiais. A partir do zsh 5.0.7, esta é a função __git_branch_names , mas esta não é uma interface estável, portanto, pode mudar em outras versões. Para usar essa função, coloque esta linha no seu .zshrc :

compdef __git_branch_names gpDo

Com essa declaração, a conclusão após gpDo só funcionará depois que você tiver concluído algo em uma linha de comando git pelo menos uma vez. Isto é devido a uma peculiaridade de autoloading de função no zsh. Como alternativa, execute _git 2>/dev/null no seu .zshrc ; isso causa um erro porque a função de conclusão é chamada em um contexto inválido, mas o erro é inofensivo, e o efeito colateral de carregar _git e funções associadas, incluindo __git_branch_names ', permanece.

Como alternativa, defina sua própria função para conclusão de ramificação git. Maneira rápida e suja:

_JJD_git_branch_names () {
  compadd "${(@)${(f)$(git branch -a)}#??}"
}
    
por 15.03.2016 / 01:41