Git 选项卡补全在 mac 上的 zsh 中不起作用

无论我做什么尝试,似乎都不能在 zsh shell 中使 git tab/auto 完成工作。我已经下载了 bash 完成脚本和 zsh 完成脚本,并按照说明操作,但是我无法使它工作。

我重新安装了 oh-my-zsh,但似乎没有任何帮助或作出任何区别。

任何人谁得到它的工作向我描述他们的设置,以便我可以尝试一个模拟它,让它为我工作?

具体来说,到目前为止我所做的是:

运气不好。

71686 次浏览

答案是,我有 alias git=hub在我的 .zshrc文件。见 https://github.com/github/hub的信息集线器(这是真棒)。

这里有一个关于我在 hub 和 git 完成时遇到的问题的信息链接: https://github.com/github/hub/issues/586#issuecomment-47727226

今天同样的问题困扰着我。受到这些答案的启发,我环顾了一下.zhrc,发现了这个:

Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
Example format: plugins=(rails git textmate ruby lighthouse)
Add wisely, as too many plugins slow down shell startup.
plugins=(git)

只要注释上面的一行来启用 git 插件,问题就解决了。 关于这个插件的更多细节可以在这里找到: Https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/git

对于2019年的观众:

如果你使用 ZSH:

brew install hub

mkdir ~/.zshmkdir ~/.zsh/completions

一旦你得到你的 创建的目录已安装集线器,你必须 cphub.bash_completion.sh文件到你的本地 zsh/completion文件夹。
(我的是 cp /usr/local/etc/bash_completion.d/hub.bash_completion.sh ~/.zsh/completions/_hub)

然后在 ~/.zshrc文件中添加以下代码行:

fpath=(~/.zsh/completions $fpath)
autoload -U compinit && compinit

然后 source ~/.zshrc好了! 您应该有可用的 git 完成

来源: https://github.com/github/hub/tree/master/etc#zsh

一行程序

echo 'autoload -Uz compinit && compinit' >> ~/.zshrc && . ~/.zshrc

这将启用. zhrc 中的完成并将设置应用到当前的终端会话。

说明:

实际上,ZSH 是的知道如何开箱即用地完成 git,但是您需要打开完成特性本身(根据您所描述的步骤,我猜您还没有完成)

把这个加到你的 .zshrc应该足够了:

autoload -Uz compinit && compinit

在放入行 .zshrc文件之后,不要忘记重新启动 shell,以便 ZSH 获取新的配置(或者,您可以在当前会话中执行该行,这将启用该会话的自动完成)

zsh compinit: insecure directories警告

感谢@FranMorzoa 建议使用 compinit -u跳过完成脚本的安全检查

虽然这样可以消除警告/确认,但警告是有原因的,不应该正常发生。

这表明完成脚本的所有权出了问题,可以(也应该)通过以下方法之一进行修复:

更多信息

PS 这里的另一个答案建议安装 hub工具: 尽管这个工具很方便,但它只是 Git 的第三方(github 社区)包装器。因此,它与“ ZSH 中的 Git 完成”这一主题毫无关系

对我来说,问题在于当通过自制软件安装 git 时,git 会安装自己的 zsh shell 扩展,这个扩展比 oh-my-szh 安装的默认扩展完整/能力要差得多。找出您的 git 安装的版本,然后删除 zsh 自动完成。我的在这里,就这样删掉了:

rm -rf /usr/local/Cellar/git/2.28.0/share/zsh/

这并不是说这个问题不可能是其他任何一个答案或两者的结合。

如果没有什么帮助,尝试删除符号链接 /usr/local/share/zsh/site-functions/_git,出现在安装 git 与家酿 brew install git

mkdir -p ~/.zsh/completions
curl "https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh" > ~/.zsh/completions/_git
chmod a+x ~/.zsh/completions/_git
cat ~/.zshrc | grep 'fpath=(~/.zsh/completions $fpath)' > /dev/null || echo 'fpath=(~/.zsh/completions $fpath)' >> ~/.zshrc
cat ~/.zshrc | grep 'autoload -Uz compinit && compinit' > /dev/null || echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
source ~/.zshrc

或者只是运行 brew install zsh-completions并按照说明进行操作。