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

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

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)

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

関連情報