2017-08-24 40 views
0

比方說,我想編寫一個自定義shell完成函數,僅在git checkout <tab>上觸發。我可以寫一個自定義的鉤git完成這樣的:如何爲多字詞前綴編寫shell完成鉤子?

complete -f -F _custom_completion_function git # bash 
compctl -f -K _custom_completion_function git # zsh 

但是,這將覆蓋所有現有git的bash/zsh中完成的;我只想改變git checkout的行爲。

實現此目標的最佳策略是什麼?

+0

一個非常簡單的解決方案包括在定義'混帳checkout'的別名,添加你想要的compspec的別名,使用別名來代替'git的checkout'。 –

+0

我不確定'bash'和'zsh'解決方案是否足夠相似以保證在同一個問題中包含這兩個解決方案。 – chepner

回答

0

這很大程度上取決於您現有的git完成設置。在決定要做什麼時,機會已經在命令行上檢查了第一個字。如果第一個單詞是「checkout」,它不能只調用一個單獨的函數。

對於zsh,我建議不要使用古代的compctl完成系統。如果您使用較新的系統(通過運行autoload -U compinit; compinit),則zsh附帶的git完成功能允許您定義自己的_git-checkout函數。定義它,它將優先於一個zsh includes。