Как удалить неизвестные команды из истории терминала оболочки (zsh)

Я пытаюсь настроить свою историю в zsh. Я активировал опцию типа HIST_IGNORE_ALL_DUPS, которая удаляет повторяющиеся команды в истории.

Но я также ищу какой-нибудь вариант, который может удалить несуществующие команды, которые возвращают 127, команда не найдена.


person clement box    schedule 05.02.2021    source источник
comment
(zsh or bash) Пожалуйста, выберите один, они отличаются. Вы отметили zsh, поэтому выберите zsh. Если вас интересует bash, задайте для него отдельный вопрос.   -  person KamilCuk    schedule 05.02.2021


Ответы (1)


В Zsh такой опции нет, но это легко сделать с помощью zsh-hist plugin:

autoload -Uz add-zsh-hook

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

add-zsh-hook precmd command-not-found

Это автоматически удалит последний элемент из истории, если он вернул 127.

В качестве альтернативы, в дополнение к ее удалению, вы также можете загрузить удаленную команду в буфер редактирования, чтобы вы могли немедленно исправить любую сделанную вами опечатку, используя hist f вместо hist d:

autoload -Uz add-zsh-hook

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

add-zsh-hook precmd command-not-found
person Marlon Richert    schedule 05.02.2021