ディレクトリの変更時にプロンプ​​トを更新する方法

ディレクトリの変更時にプロンプ​​トを更新する方法

たとえば、次のようになります。

prompt_git() {
  local PL_BRANCH_CHAR
  () {
    PL_BRANCH_CHAR='!'
  }
  local ref mode repo_path
  repo_path=$(git rev-parse --git-dir 2>/dev/null)

  if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
    ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git rev-parse --short HEAD 2> /dev/null)"

    if [[ -e "${repo_path}/BISECT_LOG" ]]; then
      mode=" <B>"
    elif [[ -e "${repo_path}/MERGE_HEAD" ]]; then
      mode=" >M<"
    elif [[ -e "${repo_path}/rebase" || -e "${repo_path}/rebase-apply" || -e "${repo_path}/rebase-merge" || -e "${repo_path}/../.dotest" ]]; then
      mode=" >R>"
    fi

    setopt promptsubst
    autoload -Uz vcs_info

    zstyle ':vcs_info:*' enable git
    zstyle ':vcs_info:*' get-revision true
    zstyle ':vcs_info:*' check-for-changes true
    zstyle ':vcs_info:*' stagedstr '✚'
    zstyle ':vcs_info:*' unstagedstr '●'
    zstyle ':vcs_info:*' formats ' %u%c'
    zstyle ':vcs_info:*' actionformats ' %u%c'
    vcs_info
    echo -n "${ref/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode} "
  fi
}

build_prompt() {
  RETVAL=$?
  prompt_git
}

PROMPT="%{%f%b%k%}$(build_prompt)"

ディレクトリを変更しても反応しません

Git 統計を更新するために必要です。exec "${SHELL}" "$@"

ディレクトリの変更に自動的に反応する方法は?

ベストアンサー1

PROMPT="…$(build_prompt)"を使用すると、割り当て時間、つまり読み取り時に実行し、その実行結果をヒントとして使用します。build_prompt.zshrc

build_promptプロンプトが表示されるたびに実行するには、$(build_prompt)変数valueに文字列を直接含めますPROMPT。このオプションをオンにする必要がありますprompt_subst

setopt prompt_subst
PROMPT='%{%f%b%k%}$(build_prompt)'

または、プロンプト設定コードを実行してください。precmdフック

set_prompt () {
  PROMPT="%{%f%b%k%}${ref/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode} "
  fi
}
precmd_functions+=set_prompt
set_prompt

setoptまた、実行するコードは関数の一部zstyleではありません。autoloadある程度は機能しますが、今後これらの設定を変更することはできません。これは一度だけ実行できるコードなので、.zshrc関数の外に配置してください。

質問した質問に答えるには、ディレクトリを変更するときにコードを実行するには、次の場所に配置します。chpwdフック。しかし、それはあなたが望むものではありません。ディレクトリが変更されたときにプロンプ​​トを更新するだけでなく、git状態が変更されたときにプロンプ​​トも更新する必要があるため、プロンプトが表示されるたびに更新コードを実行する必要があります。

おすすめ記事