brew Shell 补全

Homebrew 为 brew 命令提供补全定义。一些软件包还为其自己的程序提供补全定义。

目前支持 zshbashfish

你必须手动配置你的 shell 以启用其补全支持。这是因为 Homebrew 管理的补全存储在 HOMEBREW_PREFIX 下,你的系统 shell 可能不知道它,并且由于难以自动配置 bashzsh 补全,Homebrew 安装程序不会为你执行此操作。

外部 Homebrew 命令的 Shell 补全不会自动安装。要选择使用外部命令的补全(如果提供),需要通过运行 brew completions link 将它们链接到 HOMEBREW_PREFIX

bash 中配置补全

要在 bash 中使用 Homebrew 的补全,你必须在 shell 启动时提供定义。将以下内容添加到你的 ~/.bash_profile(或者,如果它不存在,则 ~/.profile

if type brew &>/dev/null
then
  HOMEBREW_PREFIX="$(brew --prefix)"
  if [[ -r "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh" ]]
  then
    source "${HOMEBREW_PREFIX}/etc/profile.d/bash_completion.sh"
  else
    for COMPLETION in "${HOMEBREW_PREFIX}/etc/bash_completion.d/"*
    do
      [[ -r "${COMPLETION}" ]] && source "${COMPLETION}"
    done
  fi
fi

如果你安装 bash-completion 公式,这将自动提供补全初始化脚本(因此你无需遵循公式警告中的说明)。

如果你正在使用 Homebrew 的 bash 作为你的 shell(即 bash >= v4),你应该使用 bash-completion@2 公式。

zsh 中配置补全

要在 zsh 中使用 Homebrew 的补全,你必须在初始化 zsh 的补全功能之前,将 Homebrew 管理的 zsh/site-functions 路径插入到你的 FPATH 中。将以下内容添加到你的 ~/.zshrc

if type brew &>/dev/null
then
  FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"

  autoload -Uz compinit
  compinit
fi

这必须在调用 compinit 之前完成。请注意,如果你正在使用 Oh My Zsh,它会在你提供 oh-my-zsh.sh 时为你调用 compinit。在这种情况下,你可以将以下行添加到你的 ~/.zshrc 中,在你提供 oh-my-zsh.sh 之前

FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"

你可能还需要强制重新构建 zcompdump

rm -f ~/.zcompdump; compinit

此外,如果你在尝试加载这些补全时收到“zsh compinit: insecure directories”警告,你可能需要运行此命令

chmod -R go-w "$(brew --prefix)/share"

fish 中配置自动补全

如果您使用 Homebrew 的 fish,则无需配置。很友好!

如果您的 fish 来自其他地方,请将以下内容添加到您的 ~/.config/fish/config.fish

if test -d (brew --prefix)"/share/fish/completions"
    set -p fish_complete_path (brew --prefix)/share/fish/completions
end

if test -d (brew --prefix)"/share/fish/vendor_completions.d"
    set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d
end
Fork me on GitHub