2016-12-01 81 views
3

很多次,我結束了圍繞書面方式包裝函數現有的,例如:巖組功能:前進完成到子功能

function gl { 
    some_computed_stuff=... 
    git --no-pager log --reverse $some_computed_stuff "[email protected]" 
} 
function m { 
    make "[email protected]" && notify-send success || notify-send failed 
} 

我知道,別名保持自動完成,但有時是必需的功能,在這種情況下自動完成丟失。 例如在這裏我想保留git log完成我的功能glmake完成m

我試着添加compctl -K _git gl,但沒有提出任何建議。因爲我必須以某種方式找到如何提供log參數_git自動完成腳本一樣,所以我的問題是它無論如何都不會工作:

有沒有一種方法,使ZSH(也bash)的瞭解,鍵入gl是確切的相當於git log?喜歡的東西(只ZSH):

compctl 'git log' gl 
compctl 'make' m 

回答

5

對於zsh中,您可以創建一個新的完成與compdef功能。

在其基本形式中,它將完成功能與單詞相關聯。只要zsh帶有大量已經內置的完成項,就可以重用這些完成項。例如,從問題m功能:

$ compdef _make m 

按文檔,也可以定義爲完成特定服務,如果一個是在完成函數定義。再次,zsh的帶有_git完成,它已經定義git-log服務,從問題的gl功能可自動完成與:

$ compdef _git gl=git-log 

在Linux上,你可以看到現有的完成實現在/usr/share/zsh/functions/Completion/Unix/。您可以閱讀完成實現以查看它們定義的服務。