Не помещайте определенную команду в историю оболочки

Не помещайте определенную команду в историю оболочки

У меня есть команда, которая на самом деле очищает экран, а не просто прокручивает его, как команда по умолчанию clear, псевдоним которой указан cв моем файле .zshrc:

alias c='clear && printf "\e[3J";'

У меня такой вопрос: как мне убрать эту команду из истории команд zsh, чтобы при прокрутке вверх с помощью клавиши со стрелкой вверх я ее не видел?

решение1

При использовании set -o histignorespaceкоманды строки, начинающиеся с символа SPC, не вставляются в историю (хотя вы всегда можете вызвать команду, которая была введена непосредственно перед этим).

Итак, если у вас это получится:

set -o histignorespace
alias c=' printf "\e[H\e[3J"'

И введите командную строку, первой командой которой является c, тогда эта командная строка не будет добавлена ​​в историю.

Другой подход может заключаться в переопределении accept-lineвиджета таким образом, чтобы он очищал экран и буфер редактирования, когда он содержит только c:

accept-line() case $BUFFER in
  (c) printf '\e[H\e[3J'; BUFFER=; zle redisplay;;
  (*) zle .accept-line
esac
zle -N accept-line

Обратите внимание, что это сработает только если вы введете cи все, а не c; something-elseнапример. Это также сработает, если вы нажмете Enterна приглашение PS2, как в:

for i do
c

решение2

В bash HISTIGNORE='c' doesn't store a command line of a singlec to the memory list of commands. The similarly namedHISTORY_IGNORE in zsh is used to avoid sending the command to the history **file**, which is something different. AHIST_NO_STORE` также существует в zsh, но, похоже, не работает с псевдонимами.

Таким образом, похоже, что не существует решения, позволяющего избежать появления псевдонима cв истории.

Однако то, что вы делаете, очищая текущее окно ( clear) и удаляя обратную прокрутку ( printf "\e[3J"), можно также сделать с помощью другой управляющей последовательности ANSI:

ESC c               # Full Reset (RIS), VT100.

Итак,

printf '\ec'

должно быть достаточно.

Определение сочетания клавиш для этой функции должно быть простым и позволит избежать сохранения каких-либо команд в истории.

решение3

Method1:

    Just Put one blank space before entering any command it wont be recorded in history

Method2:

    set +o history (After this No command will be recorded  in history)

    set -o history(After this again command will be recorded in history)

Связанный контент