Ada*_*ers 10

zstyle :completion::complete:git-checkout:argument-rest:headrefs command "git for-each-ref --format='%(refname)' refs/heads 2>/dev/null"
Run Code Online (Sandbox Code Playgroud)

说明:

如果你在当前上下文中按下TAB(而不是按下),键入git checkout <Control-x><h>调用_complete_help会暴露zsh完成系统如何行动的内部<Control-x><h>.由此可以看出zsh将调用该__git_heads函数来完成git分支头的名称.如果然后键入which __git_heads,您可以看到这些分支头名称是通过以下方式获得的:

_call_program headrefs git for-each-ref --format='"%(refname)"' refs/heads refs/remotes 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

幸运的是,我们_call_program专门设计用于允许用户更改默认行为.所以上面的zstyle命令指示zsh使用替代git for-each-ref ...调用而不是内置调用,你可以看到在上面的调用中,我删除了refs/remotes参数.第一个参数zstyle是完成上下文,这里它意味着" headrefs当用户完成参数时,每当完成系统请求标记完成时git checkout.所以这zstyle只会影响git checkout,而不是任何其他git子命令.