Как я могу написать завершение оболочки для префикса из нескольких слов?
Допустим, я хочу написать пользовательскую функцию завершения оболочки, которая запускается только на 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.