zsh抛出错误中的Git选项卡完成

mha*_*ton 5 git zsh

在努力获得osx上git setup的tab完成后,我遇到了一些奇怪的错误,我也找不到源代码.

zsh:12: command not found: ___main
_default:compcall:12: can only be called from completion function
Run Code Online (Sandbox Code Playgroud)

我不确定是什么导致了错误,因为一切都设置正确.

zstyle ':completion:*:*:git:*' script ~/.git-completion.bash
autoload -U compinit && compinit
zmodload -i zsh/complist
source ~/.git-completion.zsh
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

hch*_*baw 14

这似乎git-completion.zsh设计成source编.您可以将git-completion.zsh文件复制到其中的某个位置,$fpath然后将其重命名为_git.

例如:(如果您决定拥有~/.zsh/functions/_git.)

首先,您可以将其复制git-completion.zsh到那里并将其重命名为_git.

% mkdir -p ~/.zsh/functions && cp git-completion.zsh ~/.zsh/functions/_git

然后你可以~/.zshrc这样:

zstyle ':completion:*:*:git:*' script ~/.git-completion.bash
# `compinit` scans $fpath, so do this before calling it.
fpath=(~/.zsh/functions $fpath)
autoload -Uz compinit && compinit
Run Code Online (Sandbox Code Playgroud)

如果我不确定,我会rm ~/.zcompdump确保compinit丢弃其缓存.

  • @HernanPintos 这两个文件都是使用 Git 发行版中的完成脚本所必需的: https://git.kernel.org/pub/scm/git/git.git/tree/contrib/completion?h=v2.30.2 (我们可以通过查看`git-completion.zsh`看到它,顺便说一句) (3认同)
  • 你确实刚刚完成了我 1 小时的搜索。谢谢!- 不再需要 `zstyle ':completion:*:*:git:*' 脚本 ~/.git-completion.bash` (2认同)
  • 遇到了同样的问题 `__git_zsh_bash_func:8: command not find: __git_aliased_command` 但重新启动终端后问题消失了。还要确保“gitfast”插件已禁用。 (2认同)

dio*_*ogo 6

mkdir -p ~/.zsh
cd ~/.zsh
Run Code Online (Sandbox Code Playgroud)

获取完成脚本

curl -o git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -o _git https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh
Run Code Online (Sandbox Code Playgroud)

添加~/.zshrc

# git completion
zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.bash
fpath=(~/.zsh $fpath)
autoload -Uz compinit && compinit
Run Code Online (Sandbox Code Playgroud)

重新启动 shell 会话