Bazel 选项卡在 zsh 中自动完成不起作用

Bazel tab auto complete in zsh not working

我使用 oh-my-zsh 并且有一个 bazel 项目。我想要制表符完整。这样我就可以执行 bazel build //src/<tab> 并自动完成。

我尝试的第一件事如下:

https://docs.bazel.build/versions/master/completion.html。我将 _bazel 文件包含在我的 $fpath 目录下。然后我重新启动了我的终端,但没有完成任何选项卡。

接下来我尝试使用 oh-my-zsh 插件。 https://github.com/jackwish/bazel。我将插件克隆到正确的位置,将 bazel 添加到我的 zshrc 插件并执行 source ~/.zshrc 仍然没有标签完成。

我使用 brew 安装了 bazel。我试过 brew uninstall bazel 并重新安装它。运气不好...

$ echo $fpath
... /Users/<username>/.oh-my-zsh/completions ...
$ ls /Users/<username>/.oh-my-zsh/completions
_bazel

我想按 Tab 键并获取选项列表并能够在它们之间切换。

您需要重新初始化完成。 ZSH 中的补全系统收集 fpath 中的补全文件,并将它们记录在 .zcompdump 文件中,作为现有补全的索引。添加新补全文件后,需要重做流程

解决方案

  1. 将以下内容放入您的.zshrc.

    # add the _bazel into path
    fpath+=(/path/to/_bazel)
    
  2. 重新收集完成并生成.zcompdump。 运行 new 交互式 ZSH shell.

    中的以下命令
    rm -f ~/.zcompdump; compinit
    

我记得 oh-my-zsh 不会为你做 compinit。您可能需要将 compinit 添加到您的 .zshrc.

检查optimization here to run compinit once a day

扩展阅读

我必须安装 zsh-completions(通过 brew)并在安装后按照说明完成工作。