zsh 上的 git 完成没有列出不明确的选项在 macOS 上

问题描述

我的机器是运行 Big Sur 的 M1 Mac mini。

我正在尝试让 git 完成在使用 zsh shell 的认终端中工作。

This is what I am trying and expecting. 下面的屏幕截图。

git completion for zsh

我能够完成工作,但与此处描述的不完全一样。

基本上,如果我输入 git cheTab 直接转换为 git checkout 而不是给出/列出所有以“che”开头的 git 命令的选项(如图所示)在上面的屏幕截图中。)

进一步按下 Tab 只会导致在各个分支之间循环,但 checkout 根本不会改变。

我尝试了多种方法,例如

但似乎没有一个工作..

我做错了什么?

(顺便说一句,即使没有显示有用的建议(在上面的屏幕截图中)我也没关系。但是完成后应该让我看到所有可能的歧义选项的列表并循环浏览它们。)

解决方法

您是通过 Homebrew 安装 Git 的吗?如果是这样,那么它还安装了与 Git 捆绑的完成,这是其 Bash 完成的一个简单端口,然后覆盖 Zsh 自己更复杂的 Git 完成。

至少 two issuestwo PRs 已提交给 Homebrew,以使安装 Git 公式附带的完成成为可选或完全删除,但是它的维护者拒绝这样做,因为他觉得在 Zsh 中使用这种 Bash 风格的完成对他来说已经足够了。他的论点基本上是,因为它与 Git 一起提供,所以它是官方完成,它应该覆盖 Zsh 自己的(更好的)Git 完成。至于为什么在 Git repo 中甚至维护这种劣质完成,当 Git 手册本身建议使用 Zsh 的完成时,我不知道。我想这对你来说是开源的。 ??‍♂️

我发现解决此问题的唯一可靠方法是将以下行放在一个人的 .zshrc 文件中:

rm -f $HOMEBREW_PREFIX/share/zsh/site-functions/_git

这将导致使用 Zsh 自己的 Git 完成功能,从而在您发布的屏幕截图中提供更好的输出。