2010-11-19 65 views
17

在zsh的,我有一個名爲g功能,其作用是這樣的:zsh的:對於命令X使用完井當我輸入命令ý

  • 不帶參數,調用git status
  • 與一個或多個參數,委託與所有給定的參數與git - 即致電git [email protected]

我想的標籤完成爲g是完全一樣的git。我可以通過alias g=git來實現,但這不允許我默認呼叫status(上面的第一點)。

我如何委託git完成?

在bash中,我只是做了complete -F _git g,它重新使用了git的完成函數。使用zsh,git的完成看起來要複雜得多,而且我無法找到類似的解決方案。

我猜想在zsh中有一些函數會說「假裝我輸入了命令[x],你會完成它什麼?」。如果我知道那是什麼,它應該很簡單,可以使用一個函數來委託它。但是我在手冊中沒有找到這樣的功能。

+0

感謝您提供關於如何使它在bash中工作的提示! – 2011-05-26 09:16:26

回答

17

compdef文檔說這個:

功能compdef可用於完成現有功能與新命令關聯。例如,

compdef _pids foo 

但適應它(_git混帳通常完成功能)沒有產生一個工作的結果對我來說(_git被自動加載甚至後):

compdef _git g 

雖然我能夠通過_dispatch得到它的工作:

compdef '_dispatch git git' g 
+1

這很奇怪。我有同樣的事情發生,但其他完成函數與第一個命令一起工作得很好。 – 2010-11-19 02:53:09

+1

優秀,非常感謝!至於爲什麼第一個不起作用,也許_git的完成是足夠自定義的,只是重定向它是不夠的讓它用任何有用的迴應? (也許它檢查命令以「git」開頭) – gfxmonk 2010-11-19 03:56:21

+2

任何想法如何'compdef'_dispatch git git'g'可以調整使g自動完成像git-status,而不僅僅是git? – 2012-08-29 09:40:15