暂时冻结历史文件

暂时冻结历史文件

这两个问题解决了如何防止给定命令添加到 shell 历史记录中:

答案集中在用户可以使用的解决方案上为每个命令添加前缀(例如带有空格)。我正在寻找的是一个可以运行一次的命令,这将有效地“冻结“我的历史文件位于 shell 中,直到我稍后使用另一个命令将其解冻。

虽然历史是“冷冻的”:

  1. 我希望我的命令能够从现有的历史文件(例如,以便我可以执行命令搜索C-r,例如 和标准自动完成。

  2. 我想阻止我运行的任何命令被添加到历史记录中

我怎样才能用 zsh 完成这个任务?

答案1

您可以使用fc -p启动新的历史列表,并fc -P调用以前的历史列表。经过 plain 后fc -p,你会得到一个空白的历史记录。您可以传递一个文件名以fc -p从该文件读取历史记录,因此保存历史记录并立即使用fc -p.当您调用时,它会将调用前 fromfc -P的值恢复为。HISTFILEfc -p

freeze_history () {
    fc -A
    fc -p $HISTFILE
    unset HISTFILE
}
unfreeze_history () {
    fc -P
}

不幸的是,历史记录不能直接在内存中编辑,您只能通过从文件中读取来人为地填充它。

答案2

我在我的中使用以下别名.zshrc

alias disablehistory="function zshaddhistory() {  return 1 }"
alias enablehistory="unset -f zshaddhistory"

所以我可以运行disablehistory,并且没有新命令会从我当前的会话中输入历史记录。然后,我就可以跑了enablehistory

怎么运行的?disablehistory定义历史钩子函数

如果任何钩子函数返回状态 1(或除 2 之外的任何非零值,尽管对于 shell 的未来版本不能保证这一点)历史行将不会被保存,尽管它会一直保留在历史记录中,直到执行下一行为止,允许您立即重用或编辑它。

因此它指示zsh始终拒绝历史记录条目。

enablehistoryunsets(-f代表函数)zshaddhistory 函数,因此返回默认行为。

答案3

这些可能会有所帮助:您可以键入unset HISTFILE以关闭会话历史记录。注销并重新登录将再次启动。

此外,您可以返回到历史记录中的命令并通过点击 来删除它CTRL-u

祝你好运!

相关内容