Algum shell pode fazer uma pesquisa interativa em nível de argumento?

6

Às vezes, preciso reutilizar alguns argumentos longos, como caminhos.

Se eu usar a pesquisa de histórico ( CTRL + R ), talvez encontre algum comando que contenha o caminho, mas ainda precise excluir qualquer outra coisa do comando antigo e, em seguida, mova o cursor para escrever o novo comando. Pior é que não posso fazer isso mais de uma vez em uma linha.

Gostaria de saber se algum shell fornece uma pesquisa de histórico em nível de argumento?

A conclusão de tabulação que examina comandos de histórico (e argumentos) de alguma forma ajuda. Mas a conclusão deve corresponder ao prefixo que você digita, em vez de qualquer substrings.

    
por user716468 20.01.2013 / 00:21

4 respostas

2

Se bem entendi, você está após o histórico completo dinâmico (veja, por exemplo, man bash ou link ), por padrão, ligado a M-Tab .

    
por 20.01.2013 / 12:58
1

Em zsh, com a complementação de novo estilo ativa (ou seja, com compinit no seu .zshrc ), o _history_complete_word fornece esse recurso. É acessível através de dois widgets: _history-complete-older e _history-complete-newer , vinculados a ESC , e ESC / por padrão. Esses dois comandos percorrem todas as palavras no histórico do shell que têm a palavra atual como um prefixo.

    
por 21.01.2013 / 01:39
0

Em bash(1) (isso vem originalmente do shell C), você pode repetir os comandos anteriores usando ! (contanto que eles estejam no histórico). Então, por exemplo:

enter code here

frob --vigorous extremely/super/cali/fragi/listic/file/name
...
...
xemacs !frob:$       # Edit last argument to last frob command
!frob                # Repeat last frobbing
fiddle !frob:1-$     # Fiddle, use arguments 1 to last of !frob

A sintaxe leva algum tempo para se acostumar, e (devido ao luxo de readline) eu uso raramente, mas é bastante útil. É (ou costumava ser) um pouco frágil, em que, por exemplo, ele funcionava de forma imprevisível em scripts (mas eu certamente faria três vezes se estivesse executando o comando correto, então ...).

    
por 21.01.2013 / 18:39
0

Jogue com o ALT-. , do bash manpage:

- yank-last-arg (M-., M-_):
Insert the last argument to the previous command (the last word of
the previous history entry). With an argument, behave exactly like
yank-nth-arg. Successive calls to yank-last-arg move back through the
history list, inserting the last argument of each line in turn. The
history expansion facilities are used to extract the last argument,
as if the "!$" history expansion had been specified.
    
por 04.12.2016 / 22:55