我在 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
一切都按预期进行!