从 zsh 历史记录中删除命令

时间:2021-01-06 20:07:41

标签: zsh history fc

我正在编写 shell 历史记录应用程序,但在从 zsh 历史记录中删除命令时遇到问题。在开发 bash 兼容性时,我使用 readline 来操作历史记录 - 我首先从 readline 的历史记录中删除命令,然后将历史记录写入文件。程序退出后,如果历史被操纵,那么我执行 history -r 并得到预期的行为。由于 zsh 不使用 readline 并且其历史命令与可在 bash 上找到的命令明显不同,因此我别无选择,只能直接操作历史文件。但是,当我这样做时,直到 shell 重新启动后,更改才会反映出来。我曾尝试使用 zsh 的 history -r 等价物,它应该是 fc -R,但没有得到预期的结果。虽然运行后该命令从历史记录中删除,但按向上箭头(为了返回上一个命令,应该是调用程序的命令)使我看到历史记录中一个看似随机的命令。

如果有人解释我遇到的奇怪行为,我将不胜感激。也欢迎任何指向正确方向的指针。

1 个答案:

答案 0 :(得分:0)

我在 my Zsh history editing plugin zsh-hist 中解决了这个问题,没有直接接触 histfile,而是通过 Zsh 自己的机制做所有事情:

  1. Set $HISTORY_IGNORE locally to a pattern that matches the contents of the entries you want to delete.
  2. Use fc -W to write the history to file. 由于 HISTORY_IGNORE,不会写入不需要的条目。
  3. Use fc -p to create a new history from file.

Zsh 文档: