zsh:使用 Git 命令完成功能的 Tab 补全

zsh:使用 Git 命令完成功能的 Tab 补全

在 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)}#??}"
}

相关内容