Zsh

如何清除zsh中的歷史記錄

  • September 22, 2021

我正在尋找 bash 命令的 zsh 等效項history -c,換句話說,清除目前會話的歷史記錄。在 zshhistory -c中返回 1 並帶有錯誤消息history: bad option: -c

只是為了澄清,我不是在尋找刪除內容的方法$HISTFILE,我只是想要一個命令將歷史記錄重置為我打開終端時的相同狀態。刪除的內容$HISTFILE與我想要的相反:它刪除了我想要保留的歷史記錄並保留了我想要刪除的歷史記錄(因為目前會話的歷史記錄會附加到它上面,無論它的內容之前是否被刪除)。

我現在使用一種解決方法,但它顯然不太理想:在目前會話中,我設置HISTFILE=/dev/null並關閉並重新打開終端。這會導致關閉會話的歷史記錄不會附加到$HISTFILE. 但是,我真的很喜歡history -cbash 之類的東西,它比必須關閉並重新啟動終端要優雅得多。

要獲得空歷史記錄,請暫時設置HISTSIZE為零。

function erase_history { local HISTSIZE=0; }
erase_history

如果您想從此 shell 實例中刪除新的歷史記錄,但保留最初載入的舊曆史記錄,請按上述方式清空歷史記錄,然後重新載入保存的歷史記錄fc -R

如果不希望erase_history通話記錄在歷史記錄中,可以在zshaddhistoryhook中將其過濾掉。

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.

相當於history -con zsh 是history -p

引用自:https://unix.stackexchange.com/questions/544373