C'è un modo di usare ctrl-r dopo aver digitato parte del comando in bash?


13

In bash il comando Ctrl+ rè molto utile, io digito Ctrl+ r whatevere cerca nella mia cronologia i comandi che contengono la parola whatever. Ma se scrivo whatevere realizzo che vorrei cercare quella parola e premere Ctrl+ rnon succede nulla.

C'è un modo per colpire una chiave e farla comportare come se avessi digitato Ctrl+ r whateverinvece di whatever Ctrl+ r?

Ho il seguente nel mio .inputrc:

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

ma questo funziona solo se l'inizio della riga è lo stesso.

Risposte:


12

Puoi cercare nella cronologia di bash usando ciò che hai già digitato facilmente.

Supponiamo di aver appena digitato curl -I http://superuser.come di aver dimenticato di digitare Ctrl+ rprima:

$ curl -I http://superuser.com

Se vuoi fare una i-search sulla tua cronologia, vai prima all'inizio della riga ( Ctrl+ a), inserisci i-search ( Ctrl+ r) e digita Ctrl+ y. Questo dovrebbe cercare usando il contenuto dell'intero testo che hai già digitato:

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

In alternativa, puoi usare Ctrl+ winvece di Ctrl+ yper cercare usando solo la prima parola del testo che hai appena digitato:

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

Associare tutto a una sola chiave

Se si desidera eseguire tutto ciò in una sequenza di tasti, è possibile associare un singolo tasto a una macro di tastiera. Se vuoi usare, per esempio, F12esegui:

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

Questo durerà per la sessione.

Rendendolo permanente

Basta definire la macro nel tuo ~/.inputrc:

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

Nota che qui omettiamo le virgolette singole.

Potresti trovare utile questa risposta .


1
Non sono sicuro se si tratta di un problema con la mia configurazione, ma dopo aver digitato la c-rdigitazione c-ynon incolla nulla lì. Se c-y
scrivo

Vai prima all'inizio della riga? (Ca)
hso

1
Hai ragione, non avevo intenzione di iniziare la riga. Ora ho nel mio .inputrc "\C-xr": "\C-a\C-r\C-y"e funziona molto bene! Grazie per questa risposta
Skeept

Penso che sia la terza volta che googled questa control+a control+r control+ycosa! Grazie questa risposta è sempre qui! :)
Dr Beco,

2

Salva quattro avvertimenti:

Evita un secondo Ctrl-Raggiungendo al tuo .bashrc(o al tuo .inputrcse preferisci):

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

Questo mapperà ALT-R a CTR-A CTR-R CTR-Y CTR-R

Descrizione:

  • ALT-R : la chiave di associazione. Un'altra buona opzione è \C-xr( CTR-X CTR-R )
  • CTR-A : vai all'inizio della riga (memorizzando ciò che è scritto)
  • CTR-R : avvia la ricerca inversa
  • CTR-Y : incolla ciò che CTR-A ha memorizzato come parte della ricerca
  • CTR-R : avvia la ricerca inversa con i caratteri finora

Non mi è ancora chiaro perché Cy incolla il comando nel campo di ricerca (Ca non dovrebbe essere un comando "copia", vero?) E perché Cw incolla solo la prima parola.
marcus,

sì, C-anon solo si sposta, ma memorizza (copia) il contenuto spostato.
Dr Beco,

Non posso confermare quel comportamento (basta provare Ca Cy), penso che sia più probabile che Cr abbia alcuni casi speciali integrati, ma non so dove siano documentati.
marcus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.