ZSH 和 Git 自动完成:相同的配置,不同的行为

ZSH 和 Git 自动完成:相同的配置,不同的行为

我在 Google/Super User 上搜索了一段时间,并没有发现任何与我遇到的问题类似的问题,所以我决定提出一个问题。

我的问题如下:我在两台不同的机器上有相同的 zsh/prompt/autocomplete 配置:一台运行 OSX,一台运行 Ubuntu 17.04(数字海洋上的 VPS)。

除了 git 自动完成功能之外,大多数功能的工作原理完全相同,如下所示:

此截图

如您所见,顶部窗口(macOS)显示了需要完成的一些选项,而底部窗口(Ubuntu)显示了我的所有别名和内容。

我的问题是:有人知道为什么会发生这种情况吗?有什么想法可以解决它,或者如何调试它们以找出 Mac 中出现问题的地方吗?

更多信息:

macOS Version: 10.12.4
Zsh Version: zsh 5.3.1 (x86_64-apple-darwin16.3.0)
Git Version: git version 2.12.2

Ubuntu Version: 17.04
Zsh Version: zsh 5.2 (x86_64-ubuntu-linux-gnu)
Git Version: git version 2.11.0

答案1

所以我发现人们提到命令的地方的问题whence -v

运行whence -v _git(zsh 完成函数通常遵循模式_<command_name>),我得到了两个不同的结果:

Ubuntu

$ whence -v _git
_git is an autoload shell function

苹果系统

$ whence -v git
_git is a shell function from /usr/local/share/zsh/site-functions/_git

由于我是git在 Mac 上通过 Brew 安装的,/usr/local/share/zsh/site-functions/_git因此有一个指向 brew 完成文件的符号链接。我删除了符号链接,重新加载了 shell,exec zsh一切正常。

此后,我删除git并重新安装了它,但没有完成:

brew remove git
brew install git --without-completions

一切都按预期进行!

相关内容