Git完成在OS X Yosemite和Homebrew上的zsh中不起作用

Tho*_*son 24 git homebrew zsh

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

brew install zsh git
Run Code Online (Sandbox Code Playgroud)

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

这是我目前所知道的

显然,zsh会通过查找_*其中一个目录中的文件来寻找自动完成的方法$fpath.这是我的:

% echo $fpath
/usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.6/share/zsh/functions
Run Code Online (Sandbox Code Playgroud)

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

% 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
Run Code Online (Sandbox Code Playgroud)

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

这也是我也尝试过的

混帐completion.bash

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

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

WARNING: this script is deprecated, please see git-completion.zsh
Run Code Online (Sandbox Code Playgroud)

混帐completion.zsh

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

搜索StackOverflow和Google

我在这里和谷歌上搜索了我能找到的所有东西,但似乎没有什么对我有用.

Tho*_*son 52

我只是偶然发现了答案!

在我的情况下,我在.zshrc文件中遗漏了一些重要的部分.但首先是一点背景:

我要做的是设置" zsh完成系统 ".它附带了很多命令,所有命令都有comp*.我尝试运行这几次,但在很多情况下,zsh会告诉我它不知道它们.除此之外,你还有autoload其他的东西.

这就是我做的:

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

autoload -U compinit && compinit
zmodload -i zsh/complist
Run Code Online (Sandbox Code Playgroud)

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

rm -f ~/.zcompdump; compinit
Run Code Online (Sandbox Code Playgroud)

然后我开了一个新的终端,现在git <tab>正如预期的那样工作:)

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

  • 谢谢。不过,我发现我不需要 `zmodload -i zsh/complist`。供参考。 (4认同)
  • 谢谢,它非常有帮助“autoload -U compinit &amp;&amp; compinit”对我来说足够了。 (2认同)

Jps*_*psy 19

自 macOS Catalina 以来,...
Apple 已从 bash 切换到 zsh 作为其默认 shell。

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

brew install zsh-completion
Run Code Online (Sandbox Code Playgroud)

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

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

  autoload -Uz compinit
  compinit
fi
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您的回答。在我运行 `chmod go-w '/usr/local/share'` 然后运行 ​​`rm -f ~/.zcompdump; 后,它对我有用。compinit` 按照 `brew install zsh-completion` 的建议 (4认同)
  • 我还必须执行: `chmod go-w '/usr/local/share/zsh'` 和 `chmod go-w '/usr/local/share/zsh/site-functions'` (3认同)