私はbashコマンドhistory -c
に相当するzshを探しています。つまり、現在のセッションの履歴をクリアします。 zshでは、history -c
は1を返し、エラーメッセージhistory: bad option: -c
が返されます。
明確にするために、私は$HISTFILE
の内容を削除する方法を探していません。ターミナルを開いたときと同じ状態に履歴をリセットするコマンドが欲しいだけです。 $HISTFILE
の内容を削除すると、目的とは逆に、保存したい履歴が削除され、削除したい履歴が保存されます(以前の内容に関係なく、現在のセッションの履歴が追加されるため)消去されます)。
現在使用している回避策はありますが、明らかに理想的とは言えません。現在のセッションでHISTFILE=/dev/null
を設定し、ターミナルを閉じて再度開きます。これにより、閉じられたセッションの履歴が$HISTFILE
に追加されなくなります。ただし、ターミナルを閉じて再起動するよりもはるかにエレガントなbashのhistory -c
のようなものが本当に欲しいです。
空の履歴を取得するには、一時的に 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)は別の問題です。私は他に方法はないと思います:
fc -AI
は、履歴ファイルに追加するか、fc -WI
履歴の共有設定に応じて、履歴ファイルを上書きします。$HISTFILE
)。fc -R
。