我正在寻找 bash 命令的 zsh 等效项history -c
,换句话说,清除当前会话的历史记录。在 zsh 中history -c
返回 1 并带有错误消息history: bad option: -c
。
只是为了澄清,我不是在寻找删除 内容的方法$HISTFILE
,我只是想要一个命令将历史记录重置为我打开终端时的相同状态。删除 的内容$HISTFILE
与我想要的相反:它删除我想要保留的历史记录并保留我想要删除的历史记录(因为当前会话的历史记录将附加到它,无论其内容之前是否被删除)。
我现在使用一个解决方法,但它显然不太理想:在当前会话中我设置HISTFILE=/dev/null
并关闭并重新打开终端。这会导致已关闭会话的历史记录不会附加到 中$HISTFILE
。然而,我真的很喜欢history -c
bash 之类的东西,它比必须关闭并重新启动终端要优雅得多。
答案1
相当于history -c
zsh 上的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
- 保存历史记录:
fc -AI
追加到历史记录文件,或fc -WI
覆盖历史记录文件,具体取决于您的历史记录共享首选项。 - 编辑历史文件 (
$HISTFILE
)。 - 重新加载历史文件:
fc -R
.
答案3
尝试运行以下命令:
kill -9 $$
它将终止当前终端而不保存会话历史记录。
以下内容也可能有用:
rm -f ~/.zsh_history && kill -9 $$
这将删除历史文件并终止当前终端而不保存会话历史记录。
答案4
与 @Gimi 的答案类似,但更温和一点,我没有删除文件,而是删除了它的所有内容。
echo -n > ~/.zsh_history
或者
:>.zsh_history