Как я могу написать завершение оболочки для префикса из нескольких слов?

Допустим, я хочу написать пользовательскую функцию завершения оболочки, которая запускается только на git checkout <tab>, Я могу написать собственный хук для git завершение как это:

complete -f -F _custom_completion_function git   # bash
compctl -f -K _custom_completion_function git    # zsh

Но это перезапишет все мои существующие git завершение bash/zsh; Я только хочу изменить поведение git checkout,

Какова лучшая стратегия для достижения этого?

1 ответ

Это в значительной степени зависит от вашей существующей настройки завершения git. Скорее всего, это уже проверяет первое слово в командной строке при принятии решения, что делать. Разве это не может просто вызвать отдельную функцию, если это первое слово "оформить заказ".

Для zsh я бы порекомендовал не использовать древнюю систему завершения compctl. Если вы используете более новую систему (запустив autoload -U compinit; compinit), то завершение git, включенное в zsh, позволяет вам определить свой собственный _git-checkout функция. Определите это, и оно будет иметь приоритет над тем, что включает zsh.

Другие вопросы по тегам