No meu .zshrc
arquivo escrevi uma função baseada no git log:
lg() {
git log \
--abbrev=12 \
--graph \
--oneline \
--color=always \
--format="%C(cyan)%h %C(blue)%ar %C(auto)%d %C(yellow)%s %C(white)%ae" "$@" |
fzf
Para habilitar o preenchimento automático para esta função, adicionei ao meu .zshrc
:
compdef _git-log lg
A _git-log
função é de fato a função de conclusão básica para git log no zsh.
Está dentro /usr/share/zsh/functions/Completion/Unix/_git
.
Mas usar esse método, conforme recomendado aqui , não funciona para mim.
Depois de obter meu código .zshrc
e tentar usar meu lg
comando, continuo recebendo no meu terminal:
>$ lg (eval):1: command not found: _git-log
Como usar funções de conclusão do arquivo de conclusões para outras funções?
Edição: Conforme sugerido por @Stéphane Chazelas , usei a resposta deload_helper_functions
@Gille .
No final do meu .zshrc
, agora tenho:
load_helper_functions () {
emulate -LR zsh
if ((!$+functions[$1])) || [[ $functions[$1] = 'builtin autoload'* ]]; then
autoload +X +U $1
functions[$1]=${functions[$1]%$'\n'*}
$1
fi
}
load_helper_functions _git
compdef _git lg=git-log
A
_git-log
função só é carregada na primeira invocação da_git
função autocarregável e não é autocarregável por si só, então você precisaria executá-la_git
uma vez ou torná_git-log
-la autocarregável predefinindo-a como:Para que ele seja carregado (junto com o restante da estrutura de conclusão do git) na primeira invocação, caso ainda não tenha sido carregado.
Observe que
service='not a function'
"as"_git
tentará executar_$service
se$service
for uma função que não queremos usar aqui.Como alternativa à execução da
_git
função autocarregável, você pode usar aload_helper_functions
função da resposta de @Gilles para Posso usar uma função auxiliar de um arquivo de conclusão ZSH em outro , que interpreta o código na_git
função autocarregável menos a última linha, que é executada_git
novamente após ter sido redefinida, o que deve funcionar para a maioria das funções de conclusão que usam o mesmo padrão para carregar funções auxiliares.Outra abordagem que parece funcionar em meus testes limitados seria fazer: