我有一个命令实际上会清除屏幕,而不是简单地滚动,就像默认的一样,在我的中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)