随着我的脚本越来越多地添加到composer.json
文件中,在bash
为composer
命令具有自动完成功能将很有用。 我在Twitter上的问题并没有给出立即的解决方案,并且由于我已经在为Phing
做类似的事情,所以我袖手旁观并编写了解决方案。
我们首先在bash_completion.d
目录中创建一个名为composer
的新bash完成文件(该文件需要执行权限)。 该目录通常位于/etc/bash_completion.d/
,但是在使用Homebrew的 OS X上,该目录位于/usr/local/etc/bash_completion.d/
(假设您已经安装了brew install bash-complete
)。
这是文件:
(请注意,只有最新版本的bash-complete
支持__ltrim_colon_completions
,因此您可能需要删除此行。)
要获得作曲家的命令列表,我们通过运行composer --no-ansi
为compgen
的-W选项创建一个单词列表,然后使用AWK删除不是命令的所有内容。 当用户在输入连字符后按下Tab键时,我们还将创建一个单独的标志参数列表。
通过运行composer {cmd} -h --no-ansi
,我们自动为任何子命令填写标志,并使用tr
和grep
将列表限制为仅以连字符开头的单词。
现在,在作曲家之后按Tab,bash将自动完成内置的作曲家命令和用户脚本!

在本示例中可以看到,除了内置命令(如dump-autoload
和show
,还显示了我自己的脚本,包括apiary-fetch
和其他脚本。
当记忆使我失败时,这非常有用!