Conclusão zsh arbitrária usando um atalho de teclado

Conclusão zsh arbitrária usando um atalho de teclado

Às vezes, um comando não tem uma conclusão instalada - ou pode aceitar sintaticamente vários tipos de argumentos, tornando a conclusão quase inútil. Por exemplo, "git checkout" pode receber o nome de qualquer arquivo rastreado pelo gitouo nome de qualquer árbitro ou outra árvore. Também pode levar alguns sinalizadores de opção. São muitas conclusões possíveis.

Sabendo que desejo completar, digamos, um nome de branch, existe uma maneira de vincular uma chave para completar ou exibir um menu de nomes de branch? (E da mesma forma para qualquer categoria de conclusão.)

Isso parece possível e útil, mas ainda não vi isso ser feito.

Responder1

Sim, isso pode ser feito. Originalmente, recebi o seguinte de uma das listas de discussão do zsh, mas não me lembro quem postou:

zle -C complete-file complete-word _generic
zstyle ':completion:complete-file::::' completer _files
bindkey '^x^f' complete-file

Isso poderia ser facilmente adaptado para usar uma função de conclusão diferente em vez de _files.

A primeira linha define um novo widget de conclusão nomeado complete-fileque se comporta como o widget integrado complete-worde usa a _genericfunção para gerar a lista de conclusões.

A segunda linha então o configura para que quando esse widget customizado for usado, o completador use apenas _filespara obter a lista de conclusões.

Em seguida, a terceira linha vincula o novo widget a uma sequência de teclas.

informação relacionada