QA@IT

zshでprecmdなどを複数回書くと最後に書かれたもののみ実行される。

3022 PV

.zshrcにprecmdを使う設定を追加したところ、他のところのprecmdが実行されなくなってしまいました。

precmd () {
    # ひとつめ。ここは実行されない。
}
precmd () {
    # ふたつめ。これは実行される。
}

複数回、関数を書く際に上書きされないようにする場合はどうすればいいのでしょうか?

  • 今回の場合、screen実行時のみタイトルを変更するハックと今いるディレクトリのブランチを表示するハックを使おうとしたので、統合は無理でした。
    後々の保守も考えると分けたほうが楽ですよね。
    -

回答

add-zsh-hook を使えばいけました。

autoload -Uz add-zsh-hook
_preexec_1 () {
    # ひとつめ。
}
add-zsh-hook preexec _preexec_1
_preexec_2 () {
    # ふたつめ。
}
add-zsh-hook preexec _preexec_2
編集 履歴 (0)
foo() {
  # ひとつめ
}

bar() {
  # ふたつめ
}

precmd_functions=($precmd_functions foo bar)

とかでどうでしょう?

編集 履歴 (0)
  • 自分でも調べてみて、この方法も見つけたんですが、なんかスマートじゃないなーと思ったのと、screenの時のみって処理がはいってたので場合分けが面倒だなーと思ってこっちの方法は使いませんでした。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。