Como fazer a conclusão do zsh como o bash

2

Estou usando o zsh. É um bom shell, especialmente para a função de preenchimento automático. Mas, quando eu pressiono a guia, sempre preenche automaticamente com a primeira opção de conclusão. Por exemplo, existem dois arquivos na minha pasta.

Mydata.txt
YourData.txt

Se eu digitar vim , um espaço em branco e, em seguida, pressione tab , ele será preenchido automaticamente com Mydata.txt em vez de apenas listá-los e aguardar minha entrada. Eu não gosto de continuar pressionando guia para escolher os arquivos. É mais fácil pressionar algumas letras.

Eu tentei revisar o .zshrc e definir

unsetopt MENU_COMPLETE

Mas isso não funciona.

Alguém poderia me dar algumas dicas?

    
por HXGuo 02.06.2013 / 12:44

3 respostas

2

Eu encontrei uma resposta sozinho. Se eu definir

zstyle ': completion: : : menu *: default' no select

Depois, posso inserir caracteres para selecionar as opções de preenchimento automático. No entanto, não posso selecionar por lista.

    
por 03.06.2013 / 07:24
4

Para referência, e como não tenho certeza, como o bash se comporta exatamente, cito o Um usuário Guia para o Z-Shell por Peter Stephenson, o mantenedor atual de zsh .

6.2.1 Ambiguous completions

The largest group of options deals with what happens when a completion is ambiguous, in other words there is more than one possible completion. The seven relevant options are as follows, as copied from the FAQ; many different combinations are possible:

  • with NO_BEEP set, that annoying beep goes away,
  • with NO_LIST_BEEP, beeping is only turned off for ambiguous completions,
  • with AUTO_LIST set, when the completion is ambiguous you get a list without having to type CTRL+D,
  • with BASH_AUTO_LIST set, the list only happens the second time you hit tab on an ambiguous completion,
  • with LIST_AMBIGUOUS, this is modified so that nothing is listed if there is an unambiguous prefix or suffix to be inserted -- this can be combined with BASH_AUTO_LIST, so that where both are applicable you need to hit tab three times for a listing,
  • with REC_EXACT, if the string on the command line exactly matches one of the possible completions, it is accepted, even if there is another completion (i.e. that string with something else added) that also matches,
  • with MENU_COMPLETE set, one completion is always inserted completely, then when you hit TAB it changes to the next, and so on until you get back to where you started,
  • with AUTO_MENU, you only get the menu behaviour when you hit TAB again on the ambiguous completion.

Você provavelmente vai querer usar (mas, como eu disse, não tenho certeza, sinta-se à vontade para me corrigir)

setopt BEEP NO_AUTOLIST BASH_AUTOLIST NO_MENUCOMPLETE

em que setopt NO_OPTION é equivalente a unset OPTION .

    
por 03.06.2013 / 10:03
0

eu uso

 setopt autolist

Isso faz o que você quer?

    
por 02.06.2013 / 13:36

Tags