Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

For those of you who don't do python programming on ubuntu, ipython is a python shell on steroids, but it has this amazing feature that it not only autcompletes based on known names (i.e. the same way bash does when you press tab), but if you start typing a command and press up, it doesn't scroll through the entire history (like bash) but only through the recent commands that started with the same string of leters.

So if you did some long command like scp -r -P 8000 -l user server.com:~/dir/to/copy ./ followed by several other commands. If you started typing scp and pressed up, bash would display the command shown before instead of just scrolling through the entire history.

Is there an extension like this for bash? or is there any shell that offers this kind of feature?

share|improve this question
add comment

3 Answers

up vote 19 down vote accepted

Bash does have that feature too, but it's not enabled by default. You can bind it to cursor up/down by sticking this into ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

I prefer to bind it to Ctrl+up/down instead:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

edit: To preserve ctrl+left and ctrl+right for moving back and forward in whole words, also include these lines in ~/.inputrc file:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
share|improve this answer
    
Using this tip, now I can't use Ctrl+left/right in terminal to jump to next/previous word, which ruins whole purpose for me. Maybe there is workaround? –  zetah Jan 23 '12 at 19:10
    
@zetah I edited into the answer my workaround for word moving –  wim Apr 12 '13 at 2:19
add comment

Try hitting Ctrl + R, and typing a few letters. It works in the reverse order as well.

share|improve this answer
add comment

And don't forget the fantastic history expansion shortcuts in bash. 1

I'm posting some excerpts from the manpage, in case you haven't tattooed them on your arm (or memorized them).

   Event Designators  
       An event designator is a reference to a command line entry in the  his‐
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

I frequently use the ability to refer to the last 'word' of the previous command. E.g.,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

In both cases here, the !$ matches /foo/shmoo/adir.horribilus.foo .


1... which were taken from csh. To mitigate the scope of bash's feature theft, the bash man page says

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

So, it's "similar". Any of this might break in csh or tcsh. Or whichever csh descendent you are not using due to the fact that it isn't as wonderful as bash .

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.