Como obter autocompletar estilo bash em zsh, (para comando git)

3

Eu mudei para zsh e achei melhor que bash , mas eu tenho um problema com oh-my-zsh (daqui em diante recurso de autocompletar " OMZ ").

Quando digito git chec , a OMZ conclui isso para git check ; em bash , ele é concluído em git checkout . Eu também tenho um problema com filiais remotas: ori concluído para oriG e orig para origin , em bash ele é concluído para origin/

Eu tenho o mesmo problema com outros comandos git como checkout .

Eu acho que o problema é o aliases adicionado pelo plugin. Eu não os uso, pois não quero me acostumar com eles, mas eles quebram o preenchimento automático para mim.

Existe alguma maneira de obter o autocomplete bash (eu sei que não há um autocomplete integrado no bash) em zsh ? Ou uma maneira de hackar o plugin OMZ para que ele não quebre a cada atualização.

    
por Hunsu 18.04.2016 / 10:06

1 resposta

4

Conclusão e de onde vem pode ser bastante confuso. Pegue um sistema Ubuntu 14.04 como um exemplo:

$ dpkg -L zsh-common | grep git
/usr/share/zsh/functions/Completion/Debian/_git-buildpackage
/usr/share/zsh/functions/Completion/Unix/_stgit
/usr/share/zsh/functions/Completion/Unix/_git
/usr/share/zsh/functions/Completion/Unix/_topgit
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_get_data_git
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_detect_git
/usr/share/zsh/functions/Misc/run-help-git

O pacote zsh-common envia as funções de conclusão. Por outro lado, o pacote git também vem com arquivos de conclusão para bash e zsh:

$ dpkg -L git | grep compl
/etc/bash_completion.d
/etc/bash_completion.d/git-prompt
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/git
/usr/share/bash-completion/completions/gitk

Que contém arquivos como

$ head -n 5 /usr/share/bash-completion/completions/gitk
# bash/zsh completion support for core Git.
#
# Copyright (C) 2006,2007 Shawn O. Pearce <[email protected]>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.

O pacote git fornece até mesmo um prompt que reconhece o git e que pode ser ativado, sem nenhum complemento especial, como o oh-my-zsh.

Para resumir, git subcommand completion pode vir do seu shell (zsh):

link

do git

link

ou de plugins como oh-my-zsh.

Para voltar à sua pergunta: O antigo comportamento de concluir git chec que você descreve é realmente problemático. chec ainda é ambíguo e um script de conclusão adequado não deve concluí-lo para checkout , pois há vários subcomandos que começam com chec . Se você quiser esse comportamento, descubra qual dos muitos scripts de conclusão que você estava usando antes, desative o plug-in git de oh-my-zsh e continue a usar seu script de conclusão antigo.

Como alternativa, recomendo configurar um alias e se acostumar com isso. Você pode usar

git config --global alias.co checkout

para tornar git co seu novo git checkout - o plug-in oh-my-zsh está ciente desses aliases e ainda vai completar os nomes das ramificações e tags em seguida!

    
por 18.04.2016 / 13:38