Zsh 中可重写的函数

Zsh 中可重写的函数

考虑以下两个函数:

function slow_git_prompt_info() {
  if [[ "$(command git config --get oh-my-zsh.hide-status 2>/dev/null)" != "1" ]]; then
    ref=$(command git symbolic-ref HEAD 2> /dev/null) || \
    ref=$(command git rev-parse --short HEAD 2> /dev/null) || return 0
    echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX"
  fi
}

和:

function branch_name_only_git_prompt_info() {
  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
  echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_SUFFIX"
}

我想定义其他第三个函数是当被叫时,覆盖/定义主“命名空间”中的函数git_prompt_info()以使其“指向”fast_git_prompt_info

例如:

# Pseudo-code:
function redefine_git_prompt_info() {
   git_prompt_info = branch_name_only_git_prompt_info
}

这对于 Zsh 来说可能吗?如果是这样,怎么办?

答案1

您可以在任何地方定义函数。要链接另一个函数,只需使用相同的参数调用它即可。

redefine_git_prompt_info () {
  git_prompt_info () { branch_name_only_git_prompt_info "$@"; }
}

如果branch_name_only_git_prompt_info稍后重新定义,则调用redefine_git_prompt_info将调用新定义。如果你想复制当前的定义,在 zsh 中,你可以轻松地做到这一点,这要归功于functions大批

redefine_git_prompt_info () {
  functions[git_prompt_info]=$functions[branch_name_only_git_prompt_info]
}

相关内容