clement box
clement box

Reputation: 151

How to remove unknown commands from shell terminal history (zsh)

I'm trying to setup my history in zsh. I have activated option like HIST_IGNORE_ALL_DUPS which removes duplicated commands in the history.

But I am also looking for some option that can remove commands that don't exist which return 127 "command not found".

Upvotes: 1

Views: 906

Answers (1)

Marlon Richert
Marlon Richert

Reputation: 6985

There's no such option in Zsh, but this can be easily achieved with the zsh-hist plugin:

autoload -Uz add-zsh-hook

command-not-found () {
  # -f: force
  # -s: silent
  # -1: most recent history item
  (( ? == 127 )) && 
      hist -fs delete -1
}

add-zsh-hook precmd command-not-found

This will automatically delete the last command line from history, if it returned 127.

Alternatively, in addition to deleting it, you can also load the deleted command into the editing buffer, so you can immediately fix whatever typo you made, by using hist fix instead of hist delete:

autoload -Uz add-zsh-hook

command-not-found () {
  (( ? == 127 )) && 
      hist -fs fix -1
}

add-zsh-hook precmd command-not-found

Upvotes: 3

Related Questions