我有一个Git别名update
,我想为其配备分支名称补全。别名的定义如下:
[alias]
update = "!f() { git push . origin/$1:$1; }; f"
(它会使用上游版本更新本地跟踪分支,而不必检出该分支。不过,对于特定问题而言,它并不重要。)
我希望该命令为其参数$1
用制表符填写现有的分支名称。我知道我可以定义一个名为_git-update
的函数来控制完成,但是我缺少一些功能来使它起作用:
_git-update ()
{
***some-function-here*** "$(__git_branch_names)"
}
我正在使用brew install zsh-completions
(在https://github.com/zsh-users/zsh-completions上设置的)上由namedtuple
安装在OS X上的补全。
(此问题与https://stackoverflow.com/a/41307951/169947直接相似,但对于Zsh而不是Bash。)
答案 0 :(得分:4)
可能有点抢先,但这是有效的:
# provides completion options similar to git branch/rebase/log
_complete_like_git_branch() {
__gitcomp_nl_append "FETCH_HEAD"
__gitcomp_nl_append "HEAD"
__gitcomp_nl_append "ORIG_HEAD"
__gitcomp_nl_append "$(__git_heads)"
__gitcomp_nl_append "$(__git_remote_heads)"
__gitcomp_nl_append "$(__git_tags)"
__gitcomp_nl_append "$(__git_complete_refs)"
}
_git_rebase_chain() { _complete_like_git_branch }
# my git "bang" alias of git log
_git_lgk() { _complete_like_git_branch }
参考:contrib/completion/git-completion.bash
可能的改进:
~/.zshrc
中使用全局 shell 函数?答案 1 :(得分:0)
我使用此函数将工作分支附加到我的 PS1:
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}