У меня есть команда, которая на самом деле очищает экран, а не просто прокручивает его, как команда по умолчанию 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 single
c to the memory list of commands. The similarly named
HISTORY_IGNORE in zsh is used to avoid sending the command to the history **file**, which is something different. A
HIST_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)