如何从ZSH的历史logging中删除条目

比方说,我使用zsh运行了一个命令

echo "mysecret" > file

我可以使用命令fc -l轻松打印历史logging,包括条目号:

 1 echo "mysecret" >| file 

但是,我怎样才能轻松地从历史logging中删除一个条目?

我在man zshbuiltins中找不到相应的段落。

* BSD /达尔文:

 LC_ALL=C sed -i '' '/porn/d' $HISTFILE 

Linux(GNU sed):

 LC_ALL=C sed -i '/porn/d' $HISTFILE 

这将删除$ HISTFILE中与“porn”匹配的所有行。

通过setopt HIST_IGNORE_SPACE ,你可以在空间字符前加上上面的命令来防止写入$ HISTFILE。

正如Tim在他的评论中指出的那样 ,LC_ALL = C的前缀可以防止“非法字节序列”失败。

我不知道是否有一些优雅的方法来做到这一点,但在类似的情况下,我已经注销(允许zsh清空缓冲区,并将我的历史logging写入文件),然后login,最后手动编辑 ~/.zsh_history ,删除“危险”的路线。

如果您在zsh中使用HIST_IGNORE_SPACE选项,则可以用空格“”来预加命令,并且不会在历史logging文件中记住它们。 如果你有秘密的命令你通常使用,你可以做这样的事情:

http://unsyncopated.com/blog/index.php/2007/08/18/omitting-certain-commands-from-zshs-history/