我注意到,存储命令历史记录的默认行为是仅存储最新条目。输入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
当命令导致错误时执行该函数以在文件中进行记录。