Autocomplete Composer script names on the command line

As I add more and more of my own script targets to my composer.json files, I find that it would be helpful to have tab autocomplete in bash. I asked on Twitter and didn't get an immediate solution and as I had already done something similar for Phing, I rolled up my sleeves and wrote my own.

Start by creating a new bash completion file called composer in the bash_completion.d directory. This file needs executable permission. This directory can usually be found at /etc/bash_completion.d/, but on OS X using Homebrew, it's at /usr/local/etc/bash_completion.d/ (assuming you have already installed with brew install bash-completion).

This is the file:

(Note that __ltrim_colon_completions is only in recent versions of bash-completion, so you may need to remove this line.)

Reading from the bottom, to get the list of commands to composer, we create a list of words for the -W option to compgen by running composer --no-ansi and then manipulating the output to remove everything that isn't a command using awk. We also create a separate list of flag arguments when the user types a hyphen and then presses tab.

Finally, we also autocomplete flags for any subcommand by running composer {cmd} -h --no-ansi and using tr and grep to limit the list to just words starting with a hyphen.

That's it. Now composer {tab} will autocomplete both built-in composer commands and also custom scripts!

Composer autocomplete

As you can see, in this example, in addition to the built-in commands like dump-autoload and show, you can also see my custom scripts, including apiary-fetch and .

This is very helpful for when my memory fails me!

5 thoughts on “Autocomplete Composer script names on the command line

  1. This is a very helpful script.

    For macOS users: don't forget to install Bash Completion by running brew install bash-completion.

    1. I installed bash-completion on OSX, restarted my terminal, but for some reason it is still not working.

      jkeppens$ brew ls –versions bash-completion
      bash-completion 1.3_2

      The file has executable rights:

      jkeppens$ ls -al /usr/local/etc/bash_completion.d/composer
      -rwxr-xr-x 1 jkeppens admin 962 Jun 9 13:49 /usr/local/etc/bash_completion.d/composer

      Anything I need to do to activate bash-completion apart from installing it?

Leave a Reply

Your email address will not be published. Required fields are marked *