Git选项卡完成在mac上的zsh中不起作用

Posted

技术标签:

【中文标题】Git选项卡完成在mac上的zsh中不起作用【英文标题】:Git tab completion not working in zsh on mac 【发布时间】:2014-08-22 05:26:00 【问题描述】:

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

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

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

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

改用 zsh 作为我的默认 shell 已安装 oh-my-zsh 下载https://github.com/git/git/blob/master/contrib/completion/git-completion.bash并保存在~/.completion/git/git-completion.sh 下载https://github.com/git/git/blob/master/contrib/completion/git-completion.zsh并保存在~/.zsh/_git 已添加zstyle ':completion:*:*:git:*' script ~/.completion/git/git-completion.sh

运气不好。

【问题讨论】:

请准确说明您是如何“遵循说明”的。 编辑以反映我的尝试 你有added git to the plugins list吗? 是的,我的插件列表只包含 git 插件。 fpath=(~/.zsh $fpath) 是否在您的配置中(可能由 Oh My Zsh 提供)? 【参考方案1】:

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 到skip the security checks for completion scripts

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

这表明完成脚本的所有权存在问题,可以(并且应该)使用以下方法之一进行修复:

brew.sh版本:

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

另一个可能适用于非 brew zsh,感谢 pvinis on GitHub:

compaudit | xargs chmod g-w

更多信息

https://git-scm.com/book/en/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Zsh https://docs.brew.sh/Shell-Completion#configuring-completions-in-zsh

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

【讨论】:

很好但是重启后我应该再次运行这个命令... OS catalina @JEX 如果你把这一行放在你的.zshrc 中——它就像配置一样工作,即 ZSH 在每次启动时都会执行那里的所有内容,因此无需在重新启动 mac 后运行该命令。但是,如果您只需要打开一次完成,您可以直接执行命令,您将获得自动完成,但它只会在该 ZSH 会话中保持活动状态。 @IvanBartsov 谢谢伊万 % source ~/.zshrc zsh compinit: 不安全的目录,为列表运行 compaudit。忽略不安全的目录并继续 [y] 或中止 compinit [n]?在“&& compinit”之后添加 -u 解决了这个问题。 @FranMarzoa 的答案很明确——“autoload -Uz compinit && compinit -u”使该功能按预期工作,在启动新终端时不会出现任何不安全的目录警告。谢谢!【参考方案2】:

对于 2019 年的观众:

如果你使用 ZSH:

brew install hub

mkdir ~/.zshmkdir ~/.zsh/completions

创建目录安装集线器后,您必须将cp hub.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

【讨论】:

谢谢你,我的朋友!再简单不过了。 虽然 zsh 是 OS X 上新的“默认”shell,但您必须启用它:chsh -s /bin/zsh。是的,它在启动消息中告诉你这一点,但我忽略了它。之后这就像一个魅力。【参考方案3】:

答案是我的.zshrc 文件中有alias git=hub。有关集线器的信息,请参阅 https://github.com/github/hub(非常棒)。

这里是关于我在使用集线器和 git 完成时遇到的问题的信息的链接:https://github.com/github/hub/issues/586#issuecomment-47727226

【讨论】:

感谢您的关注。 谢谢。今天早上帮了我。【参考方案4】:

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

【讨论】:

我没有意识到这不是默认的 zsh 完成,删除链接解决了我的问题。在为我的包装函数gb 配置完成后,我在选项卡上得到了_git_branch:[:16: unknown condition: -lt,就像这样compdef _git gb=git-branch【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

今天同样的问题困扰着我。受到答案的启发,我环顾了 .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

【讨论】:

【参考方案7】:
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 并按照说明进行操作。

【讨论】:

brew install zsh-completions 抛出一个错误,但是一个一个地运行所有提到的步骤,对我有用,直到外壳打开,在我关闭终端并重新打开后,它没有工作。

以上是关于Git选项卡完成在mac上的zsh中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Dropzone 在 jquery 选项卡中不起作用

Select2 在引导选项卡中不起作用

Chrome 扩展程序 - 在新打开的选项卡中不起作用

如何使用 zsh compinit 启用 git 文件选项卡完成?

Git 命令在 Mac 终端中不起作用:“dyld:找不到符号:___strlcpy_chk”错误

BaseController 委托在选项卡栏控制器内的所有继承视图控制器中不起作用