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

git completion on zsh not listing ambiguous options (on macOS)

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

我正在尝试让 git 完成在使用 zsh shell.

的默认终端中工作

This is what I am trying and expecting.截图如下。

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

基本上,如果我键入 git cheTab,它会直接转换为 git checkout 而不是 giving/listing 所有 [=53] 的选项=] 以“che”开头的命令(如上图所示。)

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

我已经尝试了多种方法,比如

但是 none 似乎有效..

我做错了什么?

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

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

至少 two issues and two PRs 已向 Homebrew 提交了安装 Git 公式附带的完成项的可选或完全删除它,但其维护者拒绝这样做,因为他觉得在 Zsh 中使用这种 Bash 风格的补全对他来说已经足够好了。他的论点基本上是因为它附带 Git,它是官方完成,它应该覆盖 Zsh 自己的(更好)Git 完成。至于为什么 Git 存储库中甚至保留了这种劣质完成,而 Git 手册本身建议改用 Zsh 的完成,我不知道。我想这对你来说是开源的。 ‍♂️

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

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

这将导致使用 Zsh 自己的 Git 补全函数,从而在您发布的屏幕截图中提供更好的输出。