Unable to forward search Bash history similarly as with CTRL-r

BashSearch

Bash Problem Overview


I am trying to search my bash history similarly as with CTRL-r, but to forward direction.

It has been a pain for me, when I just hit once too often CTRL-r, to find the previous command again.

How can you forward search your Bash history similarly as in reverse searching?

Bash Solutions


Solution 1 - Bash

You can search forward as well. From the bash info manual, "8.2.5 Searching for Commands in the History":

>To search backward in the history for a particular string, type C-r. >Typing C-s searches forward through the history.

The problem with Ctrl-S however is that sometimes collides with XON/XOFF flow control (in Konsole for instance). The searching is a readline feature however, and you should be able to bind it to some other key. Update: Simpler and better is just to disable XON/XOFF by running

stty -ixon

Solution 2 - Bash

The best trick IMHO is enabling with pgup and pgdown. just put that in your ~/.inputrc

"\e[5~": history-search-forward
"\e[6~": history-search-backward

logout/login, type the first letters and then pgup or pgdown to search throughout history

ctrl-R search all lines containing words, whereas history-search-forward search lines beginning with words

Solution 3 - Bash

You may want to try https://github.com/dvorka/hstr which allows for "suggest box style" filtering of Bash history with (optional) metrics based ordering i.e. it is much more efficient and faster in both forward and backward directions:

enter image description here

It can be easily bound to Ctrl-r and/or Ctrl-s

Solution 4 - Bash

I usually press ESC in terminal, and then the >. It resets at least and then you could try click less too often CTRL+R.

Solution 5 - Bash

Another solution is to use:

history | grep <searched expression>

Solution 6 - Bash

As many have experienced, ctrl+s freezes (and ctrl+q unfreezes) the terminal because of software flow control (XON/XOFF flow control) and you can disable it as mentioned in the accepted answer.

Although I can't say I've really intentionally used the feature, I do want the option to be able to pause a fast moving stream of terminal text, so I didn't want to completely disable it.

So instead of turning it off, I rebound the xoff function by placing the following in my .bashrc

stty stop '^P'

Which binds xoff to ctrl+p (and ctrl+q still unfreezes). I used "p" for "pause" and this does obscure the bash previous command function previous-history. Personally I always use the up arrow key for that so it doesn't matter to me, but you could choose a different key.

This automatically frees up ctrl+s for forward-search-history

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionL&#233;o L&#233;opold Hertz 준영View Question on Stackoverflow
Solution 1 - BashhlovdalView Answer on Stackoverflow
Solution 2 - BashEric BurghardView Answer on Stackoverflow
Solution 3 - BashMartin DvorakView Answer on Stackoverflow
Solution 4 - BashEyad EbrahimView Answer on Stackoverflow
Solution 5 - Bashliar666View Answer on Stackoverflow
Solution 6 - BashUserView Answer on Stackoverflow