zsh: использовать дополнения для команды X, когда я набираю команду Y - PullRequest
18 голосов
/ 19 ноября 2010

В zsh у меня есть функция с именем g, которая действует следующим образом:

  • без аргументов, вызов git status
  • с одним или несколькими аргументами, делегированиеgit со всеми приведенными аргументами - то есть вызов git $@

Я бы хотел, чтобы завершенные табуляции для g были точно такими же, как и для git.Я могу добиться этого с помощью alias g=git, но это не позволяет мне вызывать status по умолчанию (первый пункт выше).

Как я могу делегировать завершение для git?

В bash я просто сделал complete -F _git g, который повторно использует функцию завершения git.С zsh завершение git выглядит намного более сложным, и я не смог найти похожее решение.

Я бы предположил, что в zsh есть какая-то функция, которая говорит «притворись, что я набрал команду [x],Вы заканчиваете это? "Если бы я знал, что это было, то было бы достаточно просто использовать функцию для делегирования ему.Но я не нашел такой функции в руководствах.

1 Ответ

17 голосов
/ 19 ноября 2010

Документация для compdef гласит:

Функция compdef может использоваться для связи существующих функций завершения с новыми командами. Например,

compdef _pids foo

Но его адаптация (_git - обычная функция завершения для git ) не дала мне рабочего результата (даже после автоматической загрузки _git):

compdef _git g

Я смог заставить его работать через _dispatch хотя:

compdef '_dispatch git git' g
...