【问题标题】:Deleting a command from zsh history从 zsh 历史记录中删除命令
【发布时间】:2021-04-12 14:39:42
【问题描述】:

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

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

【问题讨论】:

    标签: zsh history fc


    【解决方案1】:

    我已经在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 文档:

    【讨论】:

    • 不幸的是,我不能通过 zsh 内置机制做到这一点,因为 fc 是一个 shell 内置。我正在用 Rust 编写应用程序。你可以在这里看看:github.com/adder46/hstr-rs/issues/14
    • 啊哈,从你的问题中我不清楚。
    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2013-09-15
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多