【问题标题】:Git completion not working in zsh on OS X Yosemite with Homebrew使用 Homebrew 在 OS X Yosemite 上的 zsh 中 Git 补全不起作用
【发布时间】:2014-12-15 06:13:30
【问题描述】:

我无法让 git 完成以在 zsh shell 中在我新安装的 OS X Yosemite 上工作。我已经使用自制软件安装了 git 和 zsh:

brew install zsh git

当通过 homebrew 安装 git 时,它应该为你设置 tab-completion,但是当我 git <tab> 时,它只是尝试 tab-complete 目录,而不是 git-commands。 IE。它没有给出任何错误 - 它只是不工作 - 就像它没有设置一样。

这是我目前所知道的

显然,zsh 将通过在$fpath 的目录之一中查找_* 文件来寻找自动完成的方法。这是我的:

% echo $fpath
/usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.6/share/zsh/functions

看看我们看到的第一条路径:

% ls -l /usr/local/share/zsh/site-functions
lrwxr-xr-x  1 watson  admin   55 Oct 20 12:08 _git -> ../../../Cellar/git/2.1.2/share/zsh/site-functions/_git
lrwxr-xr-x  1 watson  admin   70 Oct 20 12:08 git-completion.bash -> ../../../Cellar/git/2.1.2/share/zsh/site-functions/git-completion.bash

所以它似乎设置为开箱即用 - 但事实并非如此。

这也是我尝试过的

git-completion.bash

  1. 下载中git-completion.bash
  2. 使用source git-completion.bash 运行它

这种工作(即它启用自动完成),但它会打印一个警告:

WARNING: this script is deprecated, please see git-completion.zsh

git-completion.zsh

因此,由于上述警告,我显然也尝试下载 git-completion.zsh 并按照文件顶部的指南进行操作,但它基本上告诉您首先获取 .bash 文件,这仍然给出了一个原因错误。

搜索 StackOverflow 和 Google

我已经尝试了通过在此处和在 Google 上搜索可以找到的几乎所有内容,但似乎没有什么对我有用。

【问题讨论】:

  • git-completion.zsh 脚本不会告诉您获取 .bash 文件,脚本会自行完成,它只需要知道位置即可。由于您将两个文件都放在同一个目录中,这就是您所需要的。

标签: git homebrew zsh


【解决方案1】:

从 macOS Catalina 开始,...
Apple 已从 bash 切换到 zsh 作为其默认 shell。

现在激活 zsh-completion(包括 git 补全)唯一需要的 brew 命令是这个......

brew install zsh-completion

然后将此块添加到您的 ~/.zshrc 文件中(您可能必须先创建该文件):

if type brew &>/dev/null; then
  FPATH=$(brew --prefix)/share/zsh-completions:$FPATH

  autoload -Uz compinit
  compinit
fi

有关详细信息,请参阅我在 AskDifferent 上的回答:
https://apple.stackexchange.com/a/392382/77452

【讨论】:

  • 感谢您的回答。按照brew install zsh-completion的建议,在我运行chmod go-w '/usr/local/share'rm -f ~/.zcompdump; compinit 之后,它对我有用
  • 我还必须这样做:chmod go-w '/usr/local/share/zsh'chmod go-w '/usr/local/share/zsh/site-functions'
  • 我必须在输出中列出的每个目录上运行 compaudit 并运行 chmod go-w
【解决方案2】:

我删除了我在主目录中的.zcompdump-(...) 文件,插件又开始工作了。

【讨论】:

    【解决方案3】:

    我的问题要简单得多;我忘了更改我的默认 shell。

    echo $SHELL,如果是/bin/bash,则只需输入chsh -s /bin/zsh

    【讨论】:

      【解决方案4】:

      我只是偶然发现了答案!

      就我而言,我的.zshrc 文件中缺少一些重要的部分。但首先是一点背景:

      我要做的是设置“zsh Completion System”。它带有很多命令,都以comp*命名。我尝试运行这些几次,但在许多情况下 zsh 只会告诉我它不认识它们。所以显然你必须autoload他们,等等。

      这就是我所做的:

      我在.zshrc 文件中添加了以下几行:

      autoload -U compinit && compinit
      zmodload -i zsh/complist
      

      然后我打开一个新终端并运行:

      rm -f ~/.zcompdump; compinit
      

      然后我打开了一个新终端,现在git <tab> 按预期工作了:)

      如果您在.zshrc 文件中设置自定义$fpath,我建议您在修改$fpath 之后添加这些行(虽然我不知道是否有所作为)。

      【讨论】:

      • 感谢您分享您的解决方案。这也为我解决了!
      • 谢谢。不过,我发现我不需要zmodload -i zsh/complist。仅供参考。
      • 谢谢autoload -U compinit && compinit 对我很有帮助。
      猜你喜欢
      • 2015-03-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      相关资源
      最近更新 更多