Como posso iterar através de possíveis conclusões na linha de leitura do gnu?

2

Em um shell que implementa GNU Readline , eu posso clicar na tecla para obter uma lista de possíveis conclusões para o que comecei a digitar. Por exemplo:

C:\>cd P<TAB>
PerfLogs\             Program Files (x86)\  Python27\
Program Files\        ProgramData\

Como posso escolher agora qual conclusão desejo usar?

Eu sei que se eu quiser "Program Files" no exemplo acima, eu posso digitar "rogram Files", mas eu sou preguiçoso :).

Não há alguma maneira de eu acertar um atalho de teclado que irá percorrer as conclusões possíveis para que eu possa escolher rapidamente um? Algo semelhante ao auto-completion / intellisense em IDEs modernos?

Edit: Minha solução seria usar o comando menu-complete do GNU Readline (descrito abaixo)? Mas como faço para ligá-lo a uma combinação de teclas?

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. 
    
por urig 03.08.2013 / 15:44

3 respostas

5

Em um shell que usa readline , você precisa ligar menu-complete para uma chave. Não está vinculado por padrão, complete is.

Para isso, edite ~/.inputrc e adicione o seguinte:

TAB: menu-complete

Isso provavelmente afetará todos os programas que usam readline . Use o seguinte para que isso se aplique somente a bash :

$if Bash
   TAB: menu-complete
$endif
    
por 03.08.2013 / 16:15
1

A conclusão da linha de comando funciona de duas maneiras diferentes, dependendo da plataforma.

Windows (NT e posterior)

Primeiro de tudo, o processador de comandos do Windows (cmd.exe) não não implementa o GNU Readline. Apesar disso, suporta a conclusão de guias.

Especificamente, o cmd.exe utiliza "conclusão rotativa", em que cada Guia apresenta uma opção diferente.

No seu exemplo, pressionar a tecla Tab primeiro lhe dá PerfLogs , depois Program Files , etc.

bash (e outros shells Unix)

A maioria dos shells Unix utiliza "prompting completion", onde, como Daniel disse acima, você precisa inserir outro caractere para diminuir a conclusão.

Veja esta seção do artigo da Wikipedia acima para mais detalhes.

    
por 03.08.2013 / 16:08
0

Especificamente em relação a essa parte da pergunta

Isn't there some way for me to hit a keyboard shortcut that will iterate through the possible completions so I can quickly choose one? Something similar to auto-completion / intellisense in modern IDEs?

Eu diria que fzf é o que você pode querer investigar. É uma ferramenta fofinha de localização e seleção.

    
por 27.06.2017 / 20:12