按时间顺序保存命令历史记录(在 fish 中)

按时间顺序保存命令历史记录(在 fish 中)

我注意到,存储命令历史记录的默认行为是仅存储最新条目。输入ls然后ls -al输入history将显示:

ls -al
ls

ls再次输入将显示:

ls
ls -al

命令历史记录中这些命令的所有其他出现现在都消失了。这使得我很难重新学习几天前可能做过的过程。
有没有办法让 fish 按照输入的顺序保存每个命令条目?

答案1

没有配置可以自动使用历史记录功能本身执行此操作,没有。从鱼类文档

任何重复的历史记录项都会被自动删除。

然而,如果目标只是捕获您输入的内容,以便稍后(在适当的上下文中)查看命令,这完全可以通过脚本实现。简单来说,您要做的就是将提示符下输入的每个命令保存到一个文件中,该文件没有删除重复项。

在中创建以下函数~/.config/fish/conf.d/save_full_history.fish

function log_command --on-event fish_preexec
    echo $argv[1] >>  ~/.local/share/fish/fish_full_history
end

这样做有以下几个作用:

  • 通过将其放入 中~/.config/fish/conf.d,它将在每次 Fish 启动时自动加载该函数。这是通过 完成的,conf.d因为--on-event(和其他)钩子未在延迟加载的 Fish 函数中激活。
  • 使用--on-event fish_preexec,该函数在Enter按下每个命令后立即运行。
  • 该函数接收输入的完整命令行$argv[1],并将其保存到~/.local/share/fish/fish_full_history文件中以供将来审查。

当然,您可以添加时间戳之类的内容。例如:

echo $(date --iso-8601=ns) --- $argv[1] >>  ~/.local/share/fish/fish_full_history

您还可以创建一个单独的函数(它可以在同一个文件中),fish_posterror当命令导致错误时执行该函数以在文件中进行记录。

相关内容