Eu uso zsh com o sistema de completação “novo” ( compinit
). Às vezes, quero restringir a conclusão a um subconjunto do que é possível, para reduzir a ambiguidade. Esta é uma escolha do usuário, não uma definição de configuração: quero pressionar uma tecla diferente em vez de Tabobter um conjunto diferente de conclusões. Não quero configurar as conclusões de forma diferente para esse comando . Tabainda deve fazer sua coisa normal.
Em alguns casos, existem soluções alternativas. Por exemplo, tenho uma chave vinculada a _bash_complete-word
, que na maioria dos casos completa os arquivos. Mas às vezes eu quero um foco menos comum. Por exemplo:
- Preencha apenas nomes de host após
scp
, não nomes de arquivos locais. - Preencha apenas nomes remotos após
git checkout
, não nomes de ramificações.
Como posso vincular uma chave que completará nomes remotos após git checkout
, mas não nomes de ramificações? De maneira mais geral, como posso vincular uma chave para concluir algo diferente do que normalmente seria concluído no contexto atual?
O trecho abaixo faz com que Meta+ rcomplete nomes remotos do git quando em uma linha de comando do git e nomes de host em outros lugares.
load_helper_functions
. Se você removê-lo do código acima, ele só funcionará se a conclusão forgit
tiver sido executada pelo menos uma vez antes na sessão zsh atual.$words[1]
é a primeira palavra do comando-com-argumentos que deve ser completado.complete -k …
registra a função_complete-remotes
como um widget de conclusão (o que permite executar builtins de conclusão) e a vincula a Meta+ r.