Preenchimento automático do terminal: alterne entre sugestões

37

Eu tinha isso na minha configuração do Ubuntu e, desde que mudei para o Fedora, quero configurá-lo e esqueci como ... A idéia é simples:

Não quero que o terminal me mostre sugestões quando dobrar tab; em vez disso, desejo que ele percorra todas as sugestões possíveis a cada pressão pressionada tab... isso também pode ser feito no Vim.

Então, quando eu digitar gedit ae pressionar, tabele me mostrará todos os arquivos com a primeira letra a.

vanjadjurdjevic
fonte
unix.stackexchange.com/questions/24419/…
Ciro Santilli é o nome de

Respostas:

51

Este é realmente um recurso de linha de leitura chamado menu-complete. Você pode vinculá-lo à guia (substituindo o padrão complete) executando:

bind TAB:menu-complete

Você provavelmente deseja adicionar isso ao seu ~/.bashrc. Como alternativa, você pode configurá-lo para todas as conclusões da linha de leitura (não apenas para o bash) no ~/.inputrc.

Você também pode encontrar bind -p(mostrar ligações atuais, observe que mostra a guia como "\C-i") e bind -l(listar todas as funções que podem ser ligadas) úteis, assim como a seção de edição de linhas do manual do bash e a documentação da readline .

derobert
fonte
3
@vanjadjurdjevic: Claro, basta vinculá-los a chaves diferentes.
Derobert
4
menu-completeé legal, mas ele esconde a lista de todas as sugestões possíveis ;-( É possível tanto ver a lista e percorrer as opções?
Ciro Santilli新疆改造中心法轮功六四事件
2
@CiroSantilli 轩 事件 法轮功 包 卓 轩 Também gosto desse recurso em shells baseados em readline. Atualmente, a maneira zsh de fazer isso é muito legal: o primeiro clique da guia mostra todas as possibilidades, o segundo clique da guia começa a alternar os itens de conclusão.
xuhdev
11
Vamos fingir que você está usando cdand menu-completeand cycling sobre diretórios. Qual tecla você pressiona para "selecionar" esse diretório e começar a alternar o conteúdo desse diretório? Existe outra coisa para definir / ligar?
29416 Tony
11
@ Tony, sim, ele será inserido. Mas se você usar barra, tudo bem - um caminho como " /usr/local//" ainda é perfeitamente válido e começará a concluir as coisas no menu /usr/local.
Derobert 9/08/16
6

Você pode percorrer o menu de conclusão no Bash e também pode mostrar o menu de itens. Ao contrário do Zsh, o item de menu atual não será destacado.

Adicionar a ~/.inputrc:

set show-all-if-ambiguous on
set show-all-if-unmodified on
set menu-complete-display-prefix on
"\t": menu-complete
"\e[Z": menu-complete-backward

Documentação de man bash:

Readline Variables
    menu-complete-display-prefix (Off)
           If set to On, menu completion displays the common prefix of the
           list of possible completions (which may be empty) before cycling
           through the list.
    show-all-if-ambiguous (Off)
           This alters the default behavior of the completion functions. If
           set to On, words which have more than one possible completion
           cause the matches to be listed immediately instead of ringing
           the bell.
    show-all-if-unmodified (Off)
           This alters the default behavior of the completion functions in
           a fashion similar to show-all-if-ambiguous. If set to On, words
           which have more than one possible completion without any
           possible partial completion (the possible completions don't
           share a common prefix) cause the matches to be listed
           immediately instead of ringing the bell.

Completing
    menu-complete
          Similar to complete, but replaces the word to be completed with
          a single match from the list of possible completions. Repeated
          execution of menu-complete steps through the list of possible
          completions, inserting each match in turn. At the end of the list
          of completions, the bell is rung (subject to the setting of
          bell-style) and the original text is restored. An argument of
          n moves n positions forward in the list of matches; a negative
          argument may be used to move backward through the list. This
          command is intended to be bound to TAB, but is unbound by
          default.
    menu-complete-backward
          Identical to menu-complete, but moves backward through the list
          of possible completions, as if menu-complete had been given
          a negative argument. This command is unbound by default.
gmarmstrong
fonte