Zsh
zsh:使用 Git 命令完成功能的製表符
在 zsh 中,我使用以下函式通過一個命令刪除本地和遠端分支:
gpDo () { git branch -d "$1" && git push --delete origin "$1" }
目前,Git 分支的自動完成功能不起作用。我必須手動輸入整個分支名稱。我怎樣才能讓標籤完成工作,比如功能?
我假設您使用的是由
compinit
. 如果您使用的是 oh-my-zsh,那麼您就是。您需要告訴 zsh 使用 git 分支名稱
gpDo
。Git 已經提供了一種完成分支名稱的方法。從 zsh 5.0.7 開始,這是該功能__git_branch_names
,但這不是一個穩定的介面,因此它可能會在其他版本中發生變化。要使用此功能,請將此行放入您的.zshrc
:compdef __git_branch_names gpDo
有了這個聲明,完成後
gpDo
只會在你在git
命令行上至少完成一次之後才會起作用。這是由於 zsh 中函式自動載入的一個怪癖。或者,_git 2>/dev/null
在您的.zshrc
; 這會導致錯誤,因為在無效上下文中呼叫了完成函式,但該錯誤是無害的,並且載入_git
和相關函式(包括 __git_branch_names`)的副作用仍然存在。或者,為 git 分支完成定義自己的函式。快速而骯髒的方式:
_JJD_git_branch_names () { compadd "${(@)${(f)$(git branch -a)}#??}" }