Existe uma maneira de usar ctrl-r depois de digitar parte do comando no bash?


13

No bash o Ctrl + r comando é muito útil, eu digito Ctrl + r whatever e pesquisa meu histórico de comandos contendo a palavra whatever. Mas se eu digitar whatever e perceber que eu gostaria de pesquisar essa palavra e bater Ctrl + r nada acontece.

Existe uma maneira de apertar uma tecla e tê-la se comportando como se eu tivesse digitado Ctrl + r whatever ao invés de whatever Ctrl + r ?

Eu tenho o seguinte na minha .inputrc:

"\C-p": history-search-backward

mas isso só funciona se o começo da linha for o mesmo.

Respostas:


12

Você pode pesquisar o histórico do bash usando o que você já digitou facilmente.

Suponha que você tenha acabado de digitar curl -I http://superuser.com e você esqueceu de digitar Ctrl + r primeiro:

$ curl -I http://superuser.com

Se você quiser fazer uma pesquisa no seu histórico, vai para o começo da linha primeiro ( Ctrl + uma ), digite i-search ( Ctrl + r ) e tipo Ctrl + y . Isso deve pesquisar usando o conteúdo de todo o texto que você já digitou:

(reverse-i-search)`curl -I http://superuser.com': curl -I http://superuser.com/faq

Alternativamente, você pode usar Ctrl + W ao invés de Ctrl + y para pesquisar usando apenas a primeira palavra do texto que você acabou de digitar:

(reverse-i-search)`curl': curl -I http://superuser.com/faq

Ligando tudo a uma única chave

Se você quiser fazer tudo isso em um pressionamento de tecla, você pode vincular uma única tecla a uma macro de teclado. Se você quiser usar, digamos, F12 corre:

$ bind '"\e[24~":"\C-a\C-r\C-y"'

Isso durará pela sessão.

Tornando permanente

Basta definir a macro no seu ~/.inputrc:

"\e[24~":"\C-a\C-r\C-y"

Note que aqui nós omitir aspas simples.

Você pode encontrar esta resposta útil.


1
Não tenho certeza se é um problema com a minha configuração, mas depois de digitar c-r digitando c-y não cola nada lá. Se eu digitar c-y por si só apenas cola o texto, então não posso combinar os dois comandos ...
skeept

Você vai ao começo da primeira linha? (C-a)
hso

1
Você está certo, eu não ia começar a linha. Agora eu tenho no meu .inputrc "\C-xr": "\C-a\C-r\C-y" e funciona muito bem! Obrigado por esta resposta.
skeept

Eu acho que é a terceira vez que eu pesquisei isso control+a control+r control+y coisa! Obrigado esta resposta está sempre aqui! :)
Dr Beco

0

Salvar quatro greves:

Evite um segundo Ctrl-R adicionando ao seu .bashrc (ou para o seu .inputrc se você preferir):

bind '"\er":"\C-a\C-r\C-y\C-r"' # alt-r = ctr-a ctr-r ctr-y ctr-r

Isso mapeará ALT-R para CTR-A CTR-R CTR-Y CTR-R

Descrição:

  • ALT-R : a chave de ligação. Outra boa opção é \C-xr ( CTRL-X CTRL-R )
  • CTR-A : Vá para o início da linha (memorizando o que está escrito)
  • CTR-R : Iniciar a pesquisa inversa
  • CTRL-Y : Colar o que CTR-A memorizado como parte da pesquisa
  • CTR-R : Aciona a pesquisa inversa com os personagens até o momento
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.