Так как я все больше и больше добавляю свои скрипты в файлы composer.json
, было бы полезно иметь автозаполнение для команды composer
в bash
. Мой вопрос в Твиттере не дал немедленного решения, и, поскольку я уже делал нечто подобное для Phing
, я закатал рукава и написал своё решение.
Начнем с создания нового файла bash completion с именем composer
в каталоге bash_completion.d
(файлу необходимы права на выполнение). Этот каталог обычно находится в /etc/bash_completion.d/
, но в OS X, использующей Homebrew, он находится в /usr/local/etc/bash_completion.d/
(при условии, что вы уже установили brew install bash-complete
).
Вот этот файл:
# Store this file in /etc/bash_completion.d/composer
_composer_scripts() {
local cur prev
_get_comp_words_by_ref -n : cur
COMPREPLY=()
prev="${COMP_WORDS[COMP_CWORD-1]}"
#
# Complete the arguments to some of the commands.
#
if [ "$prev" != "composer" ] ; then
local opts=$(composer $prev -h --no-ansi | tr -cs '[=-=][:alpha:]_' '[\n*]' | grep '^-')
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '-h -q -v -V -n -d --help --quiet --verbose --version --ansi --no-ansi --no-interaction --profile --working-dir' -- "$cur" ) )
else
local scripts=$(composer --no-ansi 2> /dev/null | awk '/^ +[a-z]+/ { print $1 }')
COMPREPLY=( $(compgen -W "${scripts}" -- ${cur}) )
fi
__ltrim_colon_completions "$cur"
return 0
}
complete -F _composer_scripts composer
(Обратите внимание, что __ltrim_colon_completions
поддерживается только в последних версиях bash-complete
, поэтому вам может потребоваться удалить эту строку.)
Чтобы получить список команд для composer, мы создаем список слов для опции -W для compgen
, запустив composer --no-ansi
, а затем с помощью AWK удаляем все, что не является командой. Также мы создаем отдельный список аргументов флага, когда пользователь нажимает клавишу Tab после введенного дефиса.
Запустив composer {cmd} -h --no-ansi
, мы автоматически заполняем флаги для любой подкоманды и, используя tr
и grep
, ограничиваем список только словами, начинающимися с дефиса.
Теперь по нажатию Tab после composer, bash будет автоматически завершать как встроенные команды composer, так и пользовательские сценарии!
Как можете видеть в этом примере, помимо встроенных команд, таких как dump-autoload
и show
, отображаются мои собственные сценарии, включая apiary-fetch
и прочие.
Это очень полезно, когда память меня подводит!
kamilov
Composer и Phing это консольное приложение на симфони, есть проект который решит все ваши проблемы разом github.com/bamarni/symfony-console-autocomplete
trawl Автор
Что интересно, даже сегодня в комментариях под оригинальным постом (датированным 15 мая 2017) никто не упомянул это решение…