web-dev-qa-db-ja.com

zshで履歴をクリアする方法

私はbashコマンドhistory -cに相当するzshを探しています。つまり、現在のセッションの履歴をクリアします。 zshでは、history -cは1を返し、エラーメッセージhistory: bad option: -cが返されます。

明確にするために、私は$HISTFILEの内容を削除する方法を探していません。ターミナルを開いたときと同じ状態に履歴をリセットするコマンドが欲しいだけです。 $HISTFILEの内容を削除すると、目的とは逆に、保存したい履歴が削除され、削除したい履歴が保存されます(以前の内容に関係なく、現在のセッションの履歴が追加されるため)消去されます)。

現在使用している回避策はありますが、明らかに理想的とは言えません。現在のセッションでHISTFILE=/dev/nullを設定し、ターミナルを閉じて再度開きます。これにより、閉じられたセッションの履歴が$HISTFILEに追加されなくなります。ただし、ターミナルを閉じて再起動するよりもはるかにエレガントなbashのhistory -cのようなものが本当に欲しいです。

4
Kresimir

空の履歴を取得するには、一時的に HISTSIZE をゼロに設定します。

function erase_history { local HISTSIZE=0; }
erase_history

このシェルインスタンスから新しい履歴を消去したいが、最初に読み込まれた古い履歴を保持したい場合は、上記のように履歴を空にしてから、保存された履歴を再読み込みしますfc -Rその後。

したくない場合はerase_history呼び出しを履歴に記録するには、 zshaddhistoryフック でフィルターで除外できます。

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

特定の履歴要素を1つ削除する(history -d NUM in bash)は別の問題です。私は他に方法はないと思います:

  1. 履歴を保存:fc -AIは、履歴ファイルに追加するか、fc -WI履歴の共有設定に応じて、履歴ファイルを上書きします。
  2. 履歴ファイル($HISTFILE)。
  3. 履歴ファイルを再読み込みします:fc -R