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
运气不好。
【问题讨论】:
请准确说明您是如何“遵循说明”的。 编辑以反映我的尝试 你有addedgit
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-zshPS 此处的另一个答案建议安装 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 ~/.zsh
和 mkdir ~/.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中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 zsh compinit 启用 git 文件选项卡完成?