如何清除zsh中的历史记录

如何清除zsh中的历史记录

我正在寻找 bash 命令的 zsh 等效项history -c,换句话说,清除当前会话的历史记录。在 zsh 中history -c返回 1 并带有错误消息history: bad option: -c

只是为了澄清,我不是在寻找删除 内容的方法$HISTFILE,我只是想要一个命令将历史记录重置为我打开终端时的相同状态。删除 的内容$HISTFILE与我想要的相反:它删除我想要保留的历史记录并保留我想要删除的历史记录(因为当前会话的历史记录将附加到它,无论其内容之前是否被删除)。

我现在使用一个解决方法,但它显然不太理想:在当前会话中我设置HISTFILE=/dev/null并关闭并重新打开终端。这会导致已关闭会话的历史记录不会附加到 中$HISTFILE。然而,我真的很喜欢history -cbash 之类的东西,它比必须关闭并重新启动终端要优雅得多。

答案1

相当于history -czsh 上的history -p

答案2

要获得空历史记录,请临时设置HISTSIZE为零。

function erase_history { local HISTSIZE=0; }
erase_history

如果您想从此 shell 实例中删除新历史记录,但保留最初加载的旧历史记录,请按上述方式清空历史记录,然后重新加载保存的历史记录fc -R

如果您不希望erase_history通话记录在历史记录中,可以在通话记录中过滤掉该通话。zshaddhistory

function zshaddhistory_erase_history {
  [[ $1 != [[:space:]]#erase_history[[:space:]]# ]]
}
zshaddhistory_functions+=(zshaddhistory_erase_history)

删除一个特定的历史元素(在 bash 中)是另一回事。我不认为除了以下方法之外还有其他方法:history -d NUM

  1. 保存历史记录:fc -AI追加到历史记录文件,或fc -WI覆盖历史记录文件,具体取决于您的历史记录共享首选项。
  2. 编辑历史文件 ( $HISTFILE)。
  3. 重新加载历史文件:fc -R.

答案3

尝试运行以下命令:

kill -9 $$

它将终止当前终端而不保存会话历史记录。

以下内容也可能有用:

rm -f ~/.zsh_history && kill -9 $$

这将删除历史文件并终止当前终端而不保存会话历史记录。

答案4

与 @Gimi 的答案类似,但更温和一点,我没有删除文件,而是删除了它的所有内容。

echo -n > ~/.zsh_history

或者

:>.zsh_history

相关内容