Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Control-r reverse-i-search in Bash: how do you "reset" the search in Cygwin?

How do you tell Ctrl + R reverse-i-search to "reset itself" and start searching from the bottom of your history every time?

Background: When using reverse-i-search in Bash, I always get stuck once it is finished searching up through the history and it cannot find any more matches. Sometimes I hit Esc and re-invoke Ctrl + R a second time, expecting it to start a fresh new search from the bottom of my history. However, the "pointer" still seems to be at the previous place it left off in my history.

The problem is, I usually do not want this behavior. If I hit Esc, and then re-invoke Ctrl + R, I would like that to indicate it should restart from the bottom again and work its way back up.

I am using Cygwin on Windows, as none of the so-far mentioned solutions work.


This question was marked as a potential duplicate question. This question is not a duplicate for the following reasons:

  • The alternate question does not deal with Cygwin.
  • The alternate question does not deal with how to reset the search to its initial state (instead it deals with simply going backward in search as well as forward).
like image 328
dreftymac Avatar asked Feb 14 '09 21:02

dreftymac


People also ask

What does Ctrl R do in bash?

Ctrl+R – starts a reverse search, through the bash history, simply type characters that should be unique to the command you want to find in the history.

How do I cycle through reverse I search?

Instead, we can use reverse-i-search . Start typing what you remember of your command. You will see the latest command from your history that matches your search term. Press ctrl + r again to navigate through earlier entries in your history that match your search term.


2 Answers

My Bash works as you are expecting. Maybe hitting Ctrl + C instead of Esc can help.

Also, you can search forward using Ctrl + S.

Ctrl + S works if it does not send a "stop" to your terminal, i.e., if "stty -a" gives you "-ixon". You can change it by "stty -ixon".

Thanks to @Phil for reminder.

like image 106
hayalci Avatar answered Sep 18 '22 05:09

hayalci


I never tried making this the default when hitting Esc, but Bash uses readline for input, which accepts Emacs-style keybindings by default, so you can go to the bottom using M-> (usually either by combining Meta/Alt and > or by following the Esc key with >).

If M-> does not work because your terminal does not let you enter that, try ^G (Ctrl and G simultaneously). That is the "cancel" stroke in Emacs and usually works with readline too.

like image 42
Tom Alsberg Avatar answered Sep 19 '22 05:09

Tom Alsberg