xyk blog

最近は iOS 開発の記事が多めです。

zsh で実行に失敗したコマンドを履歴に残さない

zsh で実行に失敗したコマンドは履歴(.zsh_history)に残さないようにしたい。
以下を.zshrc に追加しておく。
precmdのタイミングでフックして、zsh の fc コマンドを利用して履歴から削除している。

autoload -Uz add-zsh-hook

remove_last_history_if_not_needed () {
  local last_status="$?"
  local HISTFILE=~/.zsh_history
  if [[ ${last_status} -ne 0 ]]; then
    fc -W
    ed -s ${HISTFILE} <<EOF >/dev/null
d
w
q
EOF
    fc -R
  fi
}

add-zsh-hook precmd remove_last_history_if_not_needed