Pesquisa de conclusão de argumento semelhante a peixe em ZSH

8

Eu estava brincando com peixes e notei esse comportamento útil

Se eu digitei wget -<tab><tab><tab>, fui colocado em um menu interativo. No entanto, quando digitei, pesquisei as descrições dos próprios argumentos. Eu tentei isso no zsh, e digitar neste menu pareceu me trazer de volta ao meu prompt interativo. Existe uma maneira de obter funcionalidades semelhantes no zsh?

ollien
fonte
Eu queria saber como fazer isso por um longo tempo. Quando se trata de conclusão padrão de palavras-chave (não opções), o vim permite que você configure a conclusão para manter o foco no buffer de linha, assim, se a lista de conclusão for muito longa, basta continuar digitando e a lista é filtrada naturalmente. Mas zsh imediatamente muda foco para o widget-seleção de menu
the_velour_fog
Não entendo o comportamento que você está descrevendo. Trata-se de pesquisar as descrições das opções e não os nomes das opções? Ou é sobre a maneira de navegar pelas opções? A que menu você está se referindo (o zsh possui várias configurações diferentes para conclusão)?
Gilles 'SO- stop be evil'
@ Gilles Sim, você pode usá-lo para pesquisar as descrições das opções, ou mesmo os nomes das opções. O menu ao qual me refiro aparece quando você digita um comando, um traço e pressiona tab duas vezes. Por exemplo, digitar ls -<tab><tab>entra em um menu onde posso rolar para cima e para baixo nas diferentes opções. No peixe, eu sou capaz de digitar, que pesquisará essas opções e suas descrições. Espero conseguir uma funcionalidade semelhante no zsh.
Ollien 29/05
Ainda não tenho certeza do que você quer dizer exatamente. É a interatividade que você deseja? ou seja, ser capaz de selecionar na lista com setas e opções de destaque? Você diz que In fish, I'm able to type, which will then search these options and their descriptions.pode "pesquisar essas opções e suas descrições" no zsh. por exemplo, ls --h<tab>procura as opções que começam com --he lista quatro correspondências.
Sparhawk
Dê uma olhada nesta captura de tela . Se eu digitar ls -size<tab>, recebo ls --block-size e ls --size como opções no zsh. No entanto, o fish me recomenda --size, --tabsize, -k, -S, --block-size e --human-readable. Eu esperava alcançar funcionalidades semelhantes no zsh. Não só procurar os nomes de comandos, ele também procura as descrições
ollien

Respostas:

1

Eu acho que isso faz o que você quer:

  zmodload zsh/complist
  setopt menucomplete
  zstyle ':completion:*' menu select=0 search

Isso fará com que a lista seja exibida quando você pressionar a guia e, se você continuar digitando, pesquisará as opções disponíveis, incluindo descrições, com uma pesquisa incremental.

Você também pode estar interessado na mesma configuração, mas com interativo em vez de pesquisa. Nesse caso, à medida que você digita, as conclusões são filtradas para aquelas que correspondem ao que você digitou até o momento.

Thayne
fonte
Hmm ... se eu digitar wget -<tab>noisso não filtra a lista de conclusão. Isso apenas continua digitando 'no' no terminal depois --accept-regex=, que é a primeira opção na lista de conclusão.
Ollien
1
Não é isso que acontece comigo. Mas na verdade não fiter com a opção de pesquisa, ele só faz uma pesquisa incremental através das possibilidades
Thayne
1

Tente colocar isso no seu .zshrcarquivo:

 # load module for list-style selection
 zmodload zsh/complist

 # use the module above for autocomplete selection
 zstyle ':completion:*' menu yes select

 # now we can define keybindings for complist module
 # you want to trigger search on autocomplete items
 # so we'll bind some key to trigger history-incremental-search-forward function
 bindkey -M menuselect '?' history-incremental-search-forward

Agora, se você digitar o wget -<tab>menu com preenchimentos automáticos, será exibido. Definimos o atalho de teclas para este menu; portanto, se você pressionar a ?linha de pesquisa, aparecerá na parte superior das conclusões:

davidsykora~%wget --referer
isearch: refe

Algumas dicas adicionais:

  • você também pode definir bindkey -M menuselect '/' history-incremental-search-backwardpara pesquisa reversa
  • se você pressionar ?durante uma pesquisa novamente, a seleção passará para o próximo resultado da pesquisa. Use /para pular para o resultado anterior
  • são necessários muitos ajustes para fazê-lo funcionar como você deseja. Consulte a complist documentação para encontrar funções e opções adicionais
  • para mim, geralmente é muito mais rápido usar a vi-insertfunção complist - filtra conclusões com base no que você digita.
David Sýkora
fonte