dreftymac
dreftymac

Reputation: 32420

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:

Upvotes: 67

Views: 38305

Answers (4)

Danke Xie
Danke Xie

Reputation: 1797

I got a confirmed answer to this question.

To reset Ctrl + R, the usual Emacs key Ctrl + G can do. If you want to reverse Ctrl + R by one step, instead of working your way up from the bottom again, you can use Ctrl + S .

The trick is Ctrl + S is also used to pause the terminal. So you would need assign that to another key. For example, the following will set pause to Ctrl + W (and keep "resume" with Ctrl + Q).

$ stty STOP ^w

Alternatively, you can also totally disable XON/XOFF (resume/pause) flow control characters by

$ stty -ixon -ixoff

This will also free up Ctrl + S. To re-enable pause/resume, you can do

$ stty ixon ixoff

Upvotes: 18

Philip Reynolds
Philip Reynolds

Reputation: 9402

M-> ... moves to end of history
M-< ... moves to start of history

Your left Alt key is most likely your Meta key.

Use man readline for more readline directives.

Upvotes: 6

hayalci
hayalci

Reputation: 4119

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.

Upvotes: 36

Tom Alsberg
Tom Alsberg

Reputation: 7033

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.

Upvotes: 29

Related Questions