当以前的命令以空格开头时,是否可以从 zsh shell 历史记录中删除它?

当以前的命令以空格开头时,是否可以从 zsh shell 历史记录中删除它?

我有以下回答如何从历史记录中删除一行?。当我执行以下操作时,行 ( echo hello_world) 不会保存到历史记录中。请注意,我使用的是zshshell。

prompt$  echo hello_world
> #     ^ extra space

$ history | tail -n1
 1280  history | tail -n
$  echo hello_world
hello_world
$ history | tail -n1
 1280  history | tail -n

但是当我运行一个在开头和 do 之后有空格的命令时Ctrl+P,我可以在 shell 历史记录中看到它,即使它没有保存在history.有可能预防吗?对于bashshell,这在设置时有效HISTCONTROL= ignorespace

$  echo hello_world
$ # Press `CTRL-p` => " echo hello_world" shows up again

设置:我对 shell 有以下配置zsh
## Save only one command if 2 common are same and consistent
setopt HIST_IGNORE_DUPS

setopt HIST_IGNORE_ALL_DUPS

## Delete empty lines from history file
setopt HIST_REDUCE_BLANKS

## Ignore a record starting with a space
setopt HIST_IGNORE_SPACE

## Do not add history and fc commands to the history
setopt HIST_NO_STORE

## Add timestamp for each entry
setopt EXTENDED_HISTORY

答案1

您观察到的行为,即按下Ctrl+P会返回上一个命令,即使它以空格开头并HIST_IGNORE_SPACE已设置,已记录(我的重点):

HIST_IGNORE_SPACE( -g)

当命令行中的第一个字符是空格,或者扩展别名之一包含前导空格时,从历史记录列表中删除命令行。只有普通别名(不是全局别名或后缀别名)才有此行为。 请注意,该命令会一直保留在内部历史记录中,直到输入下一个命令才会消失,从而允许您短暂地重用或编辑该行。如果您想让它立即消失而不输入其他命令,请键入空格并按回车键。

根据手册,解决方法是键入一个空格并按Enter以防止Ctrl+P再次访问该命令。

答案2

不确定这是否是您正在寻找的内容,但在运行历史记录中不需要的命令之前,您可以使用以下命令为当前 shell 禁用它

$ 设置 +o 历史记录

然后 ctrl-p 将仅显示该内容,之后不显示任何内容

相关内容