プロファイリング

zshenvの最初に

if [[ "$PROFILE_STARTUP" == true ]]; then
  zmodload zsh/zprof
  PS4=$'%D{%s%.} %N:%i> '
  exec 3>&2 2>$HOME/tmp/zsh_profile
  setopt xtrace prompt_subst
fi

を書いて、zshrcの最後に

if [[ "$PROFILE_STARTUP" == true ]]; then
  unsetopt xtrace
  exec 2>&3 3>&-
fi

をzshenvに書いて

PROFILE_STARTUP=true zsh -i -c exit

で、zshを立ち上げる。

%D{%s%.}の部分はunixtimeをミリ秒で出力する意味。説明はzsh: 13 Prompt Expansionの13.2.4 Date and timeを参照。

$HOME/tmp/zsh_profileをVimで開いて、以下で置換をすると、各コマンドの実行時間がわかる

:%s/\v^(\d+)(\_.{-})\ze(^\d+)/\=(submatch(3)-submatch(1)) . submatch(2)/

さらに

:sort n

すると、実行時間の昇順で行を並び替えることができる。

コマンドの存在をチェックする

zshだと(( $+commands[ls] ))形式で調べるのが圧倒的に早い。

その他