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:不安全的目錄」警告,您可能需要執行此操作

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