ZSH: Используйте завершения для команды X, когда я ввожу команду y
-
26-09-2019 - |
Вопрос
В ZSH у меня есть функция называется g
который действует так:
- без аргументов, позвоните
git status
- с одним или несколькими аргументами, делегат для Git со всеми данными аргументами - то есть звонок
git $@
Я хотел бы, чтобы заполнить вкладку для g
быть точно таким же, как для git
. Отказ Я могу достичь этого с alias g=git
, но это не позволяет мне позвонить status
по умолчанию (первая точка выше).
Как я могу делегировать на завершение для git
?
В Bash я просто сделал complete -F _git g
который повторно использует функцию завершения GIT. С ZSH завершится завершение GIT намного сложнее, и я не могу найти подобное решение.
Я догадаю, что есть некоторая функция в ZSH, чтобы сказать «Притворись, что я набрал команду [x], что бы вы закончили?». Если бы я знал, что это было, это должно быть достаточно простым, чтобы использовать функцию для делегирования к ней. Но я не нашел такой функции в руководствах.
Решение
Документация для compdef
говорит это:
Функция
compdef
Может использоваться для связи существующих функций завершения новыми командами. Например,compdef _pids foo
Но адаптация его (_git
это обычная функция завершения для портить) не произвел рабочий результат для меня (даже после _git
был автозагрузка):
compdef _git g
Я смог заставить его работать через _dispatch
хоть:
compdef '_dispatch git git' g