In Matlab, there is a very nice feature that I like. Suppose I typed the command very-long-command and then a few several commands afterwards. Then later if I need the long command again, I just type very and press the up arrow key, my long command appears. It finds the last command that starts with very. I couldn't do the same in unix command line, when I try to do it, it disregards whatever I typed, and goes back to the last commands in chronological order. Is there a way to do it?
- Matlab has good default settings. I always wonder why the Unix people can't provide good default settings for these things.compie– compie2014-06-19 14:12:51 +00:00Commented Jun 19, 2014 at 14:12
- This question is similar to: How do I change bash history completion to complete what's already on the line?. If you believe it’s different, please edit the question, make it clear how it’s different and/or how the answers on that question are not helpful for your problem.melvio– melvio2024-12-22 09:14:59 +00:00Commented Dec 22, 2024 at 9:14
3 Answers
In bash this functionality is provided by the commands history-search-forward and history-search-backward, which by default are not bound to any keys (see here). If you run
bind '"\e[A":history-search-backward' bind '"\e[B":history-search-forward' it will make up-arrow and down-arrow search backward and forward through the history for the string of characters between the start of the current line and the point. See also this related Stack Overflow question.
Comments
In bash, hitting ctrl-r will let you do a history search:
$ echo 'something very long' something very long $ # blah $ # many commands later... (reverse-i-search)`ec': echo 'something very long' In the above snippet, I hit ctrl-r on the next line after # many commands later..., and then typed ec which brought me back to the echo command. At that point hitting Enter will execute the command.
3 Comments
history-search-forward and history-search-backward to navigate through the history.You can do the same thing by using "!". For example:
$ echo "Hello" Hello $ !echo echo "Hello" Hello However, it is generally a bad idea to do this sort of thing (what if the last command did something destructive?). If you expect you will reuse something, then I suggest you create a shell script and save it away somewhere (whenever I plan to reuse something, I create a script in ~/.local/bin).