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.