How to make terminal autocomplete when there are several files/directory?

  • If I have several directories, like:

    afoo abar
    

    sometimes my terminal will refuse autocomplete when I press tab (e.g. "cd a" then tab), and print the list of directories instead. Sometimes it even throws a noisy, annoying sound. Any idea how to make it autocomplete in cases like this? E.g it can show abar first, and then afoo if I press tab again. I saw this is the case in windows, or some applciation in Ubuntu

  • Something that is a life-saver for me is to have bash cycle through the possibilities instead of showing a dumb list.

    As bash is using readline for its auto-completion, add the following lines to ~/.inputrc

    Once you're satisfied and have thoroughly tested below solution for a few days/weeks, cut and paste (don't copy!) the same settings from ~/.inputrc to /etc/inputrc which contains the system-wide settings, making this available to all users on your system (including guest).

    The codez:

    # mappings to have up and down arrow searching through history:
    "\e[A": history-search-backward
    "\e[B": history-search-forward
    # mappings to have left and right arrow go left and right: 
    "\e[C": forward-char
    "\e[D": backward-char
    
    # mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
    "\t": menu-complete
    "\e[Z": menu-complete-backward
    

    then exit your terminal (or remote terminal like putty) and open it again...

    Examples:

    1. When you have 3 files: file1, file2 and file3 and you type:

      e fTabTabTab

      it'll cycle through:

      e file1
      e file2
      e file3
      

      and when you want to cycle backwards, just hit Shift+Tab

    2. When you type:

      very-complicated-command with lots of command line parameters
      

      and next time you need the same command, you just type:

      very

      and it'll type for you:

      very-complicated-command with lots of command line parameters
      

    This will save you a ton of time in bash! ;-)

    +1, interesting, but: 1. `~/.inputrc` might be preferable over `/etc/inputrc`, and 2. I think you can set this in `bash` directly: http://unix.stackexchange.com/q/55203/70524, http://unix.stackexchange.com/a/16926/70524

    This is quite nice, thanks (and have my upvote). Is there a universal way to show the options it'll loop through, which combines the best of both worlds? I like the tab+tab possibility with folders _and_ subcommands, etc. so I don't have to remember them all (e.g. `git branch `. However, if I could see a list _and_ tab through its items, that would be great! For directories and files `ls` is an option to see what items are available. However, for subcommands it is not that easy or obvious, unfortunately.

    This works also on PuTTy! Just had to restart it once :)

    @Erik: Apparently, what you asked for is possible but not going to edit my answer to keep things simple here. (deleted old comment that it is not possible)

  • After the 1st tab you need to insert more letters. So if you type

    cd a
    

    and hit tab you get nothing and after a second tab (immediately following) you get a list of the names starting with a and then need to insert an f to have it auto complete the remainder so

    cd atabtabftabtab

    will result in

    cd afoo
    

    IMHO: This is the right way. I personally find the windows behavior very annoying. Consider the case where you have a lot of files starting with `a` and you need the last one. When you accidentally press tab after `a` you have to cycle through the list of all possible completions to get to the right one.

    @Tobias: when you accidentally hit Tab, there is still [Ctrl][K]... **;-)**

License under CC-BY-SA with attribution


Content dated before 6/26/2020 9:53 AM