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]
}

관련 정보