web-dev-qa-db-ja.com

ZSHの履歴からエントリを削除する方法

Zshを使用してコマンドを実行したとしましょう

echo "mysecret" > file

コマンドfc -lを使用して、エントリ番号を含む履歴を簡単に印刷できます。

1  echo "mysecret" >| file

しかし、どうすれば簡単に履歴からエントリを削除できますか?

man zshbuiltinsに対応する段落が見つかりません。

71
sandoz

* BSD /ダーウィン:

LC_ALL=C sed -i '' '/porn/d' $HISTFILE

Linux(GNU sed):

LC_ALL=C sed -i '/porn/d' $HISTFILE

これにより、$ HISTFILEから「porn」に一致するすべての行が削除されます。

setopt HIST_IGNORE_SPACE、上記のコマンドの前にスペース文字を追加して、$ HISTFILEに書き込まれないようにすることができます。

以下のコメントでティムが指摘した のように、接頭辞LC_ALL = Cは「不正なバイトシーケンス」の失敗を防ぎます。

85
rxw

これを行うためのエレガントな方法があるかどうかはわかりませんが、同様の状況でログアウトし(zshがバッファを空にして履歴をファイルに書き込むことができます)、ログインして、最後に手動で編集しました~/.zsh_history、「危険な」行を削除します。

45
poplitea

ZshでHIST_IGNORE_SPACEオプションを使用する場合、コマンドの前にスペース「」を付けることができ、コマンドは履歴ファイルに記憶されません。よく使用するシークレットコマンドがある場合は、次の行に沿って何かを行うことができます。

http://unsyncopated.com/blog/index.php/2007/08/18/omitting-certain-commands-from-zshs-history/

24
Michael Barton