121

无论我尝试做什么,我似乎都无法在我的 zsh shell 中使 git tab/auto completion 工作。我已经下载了 bash-completion 脚本和 zsh-completion 脚本并按照说明进行操作,但我无法使其工作。

我已经重新安装了 oh-my-zsh,但这似乎没有帮助或产生任何影响。

任何可以正常工作的人都可以向我描述他们的设置,以便我可以尝试模拟它以使其为我工作吗?

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

没运气。

4

7 回答 7

309

TL;DR 单线

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

这将在 .zshrc 中启用完成并将设置应用于您当前的终端会话。

解释:

实际上,ZSH确实知道如何开箱即用地完成 git,但是您需要自己打开完成功能(从您描述的步骤来看,我猜您还没有完成)

将其添加到您的.zshrc应该就足够了:

autoload -Uz compinit && compinit

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

zsh compinit: insecure directories警告_

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

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

这表明完成脚本的所有权存在问题,可以(并且应该)使用以下其中一种来修复它:

  • brew.sh版本:

    chmod -R go-w "$(brew --prefix)/share"

  • 另一个可能适用于非 brew zsh,归功于GitHub 上的 pvinis

    compaudit | xargs chmod g-w

更多信息

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

于 2019-10-23T07:30:24.250 回答
20

对于 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

于 2019-02-11T11:06:16.737 回答
16

答案是alias git=hub我的.zshrc档案里有。有关集线器的信息,请参阅https://github.com/github/hub(这很棒)。

这是有关集线器和 git 完成问题的信息的链接:https ://github.com/github/hub/issues/586#issuecomment-47727226

于 2014-07-02T09:20:17.553 回答
3

如果没有任何帮助,请尝试/usr/local/share/zsh/site-functions/_git使用 Homebrew 删除安装 git 后出现的符号链接brew install git

于 2021-07-17T15:38:16.123 回答
2

对我来说,问题是当通过自制软件安装 git 时,git 安装了自己的 zsh shell 扩展,它比 oh-my-szh 安装的默认值要少得多。找出你的 git install 是什么版本,然后删除 zsh 自动补全。我的在这里并因此被删除:

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

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

于 2020-09-15T03:12:41.183 回答
0

今天同样的问题困扰着我。受到答案的启发,我环顾了 .zshrc 并发现了这一点:

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

于 2018-09-04T13:50:40.853 回答
-1
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并按照说明进行操作。

于 2021-09-03T10:23:17.640 回答