Selecione um resultado específico nas sugestões de conclusão

10

Digamos que eu tenho 3 arquivos em um diretório específico: abc.txt, aww.txt, ant.txt

Se eu fizer: cat a(e pressione tab para ver as opções), o terminal exibirá os 3 nomes de arquivo:abc.txt, aww.txt, ant.txt

Existe alguma maneira de selecionar o enésimo resultado, em vez de digitar, especificando o número do índice nos resultados exibidos pelo terminal?

algo como: cat a2para obter o segundo arquivo ( aww.txt)?

samsamara
fonte
Não que eu saiba. No Zsh, você pode repetir todas as conclusões possíveis pressionando a tecla TAB várias vezes (por exemplo, pressionando a tecla TAB 4 vezes ant.txt). Também pode ser configurado para que seja possível iterar para trás para uma melhor navegação. Obviamente, isso implica mudar o shell para Zsh. Se você considera uma alternativa suficientemente boa, posso escrever uma resposta para isso.
kos

Respostas:

11

Supondo que você esteja usando o bash, adicione o seguinte ao seu ~/.bashrc:

bind '"\e[6~": menu-complete'
bind '"\e[5~": menu-complete-backward'

Ou, para alterar os padrões de todos os programas que usam a biblioteca de conclusão da linha de leitura, não apenas o bash, crie o arquivo que ~/.inputrccontém:

$include /etc/inputrc
"\e[6~": menu-complete
"\e[5~": menu-complete-backward

Agora, quando você abre um novo terminal, pode pressionar:

  • TAB como normal para ver as conclusões disponíveis.
  • Pg Dn para selecionar a primeira conclusão ou mudar para a próxima.
  • Pg Up para selecionar a última conclusão ou alterar para a anterior.
  • Alt+ n Pg Dnpara selecionar a enésima conclusão ou avançar n conclusões.

Portanto, para o seu exemplo, digite Pg DnPg Dnou Alt+ 2Pg Dnpara obter o segundo arquivo aww.txt.

Martin Thornton
fonte
Vamos fingir que você está usando cde alternando entre 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
Uma alternativa, se você não deseja mover muito as mãos da linha inicial do teclado, é usar Ctrl + Alt + P em vez de PageUp e Ctrl + Alt + N em vez de PageDown, o que pode ser feito via bind '"\e\20": menu-complete-backward'e bind '"\e\16": menu-complete'.
Ruslan