Control-r reverse-i-search in bash: how do you “reset” the search in Cygwin?

时间秒杀一切 提交于 2019-12-18 10:14:53

问题


Question: 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 re-start from the bottom again and work its way back up.

Update: I guess I should have mentioned I am using Cygwin on Windows, as none of the so-far mentioned solutions work.

Update: 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).

回答1:


I never tried making this the default when hitting Escape, 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 Escape key with >).

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




回答2:


My bash works as you are expecting. Maybe hitting "ctrl+C" instead of "esc" can help.

Also, you can search forward using "ctrl+s"

edit: 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.




回答3:


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



回答4:


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

Your left alt key is most likely your Meta key.

Man readline for more readline directives.



来源:https://stackoverflow.com/questions/549810/control-r-reverse-i-search-in-bash-how-do-you-reset-the-search-in-cygwin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!