Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Deleting entries in history



On Fri, Mar 6, 2020 at 11:55 AM Manfred Lotz <ml_news@xxxxxxxxx> wrote:
>
> What is the proper way to delete entries in the history?
>
> Just load the history file in an editor, deleting things and save it?

The first thing to note is that when $SAVEHIST is nonzero, zsh will
typically update the file when the shell exits, so anything that is in
the runtime history of the current shell might reappear even after it
is deleted from the file.  I say "might" because this is affected by
the assorted setopts that control how the history is maintained.  The
only safe way to directly edit the history is to make sure no other
zsh is running that might rewrite it, and then set SAVEHIST=0 in your
current shell before doing anything else.

Once you are sure you have done that, then it should be OK to use an
editor on the history file.  Be aware that multi-line events (such as
"for" or "while" loops) are stored with lines terminated by backslash,
so if you start deleting a line that ends in backslash you need to
also delete all the adjacent lines that end in backslash, up to and
including the next following line that does NOT end in a backslash.
Single-line events never contain a backslash.

If you are using any of the setopts that store timestamped history
entries, each event will be prefixed by a ":" command that ends at the
next ";", with the timestamp between.  You should delete these along
with the event you want to remove, and avoid altering any that are on
other event lines.

All that said ... if the events you want to delete can all be matched
by some simple patterns, you might want to look into either a
zshaddhistory hook function, or a setting of the HISTORY_IGNORE
parameter.



Messages sorted by: Reverse Date, Date, Thread, Author