在 zsh 中我使用以下命令删除本地和远程分支的函数用一个命令:
gpDo () {
git branch -d "$1" && git push --delete origin "$1"
}
目前,Git 分支的自动完成功能不起作用。我必须手动输入整个分支名称。如何让制表符完成功能适用于此类功能?
答案1
我假设你正在使用“新”完成系统由 启用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_branch_names)的副作用_git
仍然存在。
或者,定义您自己的 git 分支完成函数。快速而肮脏的方法:
_JJD_git_branch_names () {
compadd "${(@)${(f)$(git branch -a)}#??}"
}