Is there a way of using ctrl-r after typing part of command in bash?

You can search bash's history using what you have already typed easily.

Suppose you have just typed curl -I http://superuser.com and you forgot to type Ctrl+r first:

$ curl -I http://superuser.com

If you want to do an i-search on your history, go to the beginning of line first (Ctrl+a), enter i-search (Ctrl+r) and type Ctrl+y. This should search using the contents of the whole text you already typed:

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

Alternatively, you can use Ctrl+w instead of Ctrl+y to search using just the first word of the text you just typed:

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

Binding it all to a single key

If you want to do all this in one keystroke, you can bind a single key to a keyboard macro. If you want to use, say, F12 run:

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

That will last for the session.

Making it permanent

Just define the macro in your ~/.inputrc:

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

Note that here we omit the single quotes.

You might find this answer useful.


Save four strikes:

Avoid a second Ctrl-R by adding to your .bashrc (or to your .inputrc if you prefer):

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

This will map ALT-R to CTR-A CTR-R CTR-Y CTR-R

Description:

  • ALT-R: the binding key. Another good option is \C-xr (CTR-X CTR-R)
  • CTR-A: Go to the begin of the line (memorizing what is written)
  • CTR-R: Start the reverse search
  • CTR-Y: Paste what CTR-A memorized as part of the search
  • CTR-R: Triggers the reverse search with the characters so far