在 fish (ctrl+r) 历史记录中以多行显示长命令

在 fish (ctrl+r) 历史记录中以多行显示长命令

当您的历史记录中充满了长命令时,我正在寻找一种使用 fish 搜索历史记录的解决方案。例如,我经常在历史记录中包含我想要重复的 json 有效负载的 curl 命令,它们很长,以至于无法容纳在一行中,这使得很难一眼就区分它们。我目前的解决方案是输入更多我想要的内容,但这很烦人。

壳历史

有没有办法让历史记录条目按执行时的样子显示,而不是将它们缩减为一行?有没有更聪明的解决方案,我并没有想到要问?

答案1

这是在功能请求中提出的 历史多行命令 #2585其中用户建议了两种解决方法:

  • 手动应用拆分。
    例如: set line (echo $history[1])针对最近的历史元素。

  • 用于sed在文件中分割行fish_history

不幸的是,此功能请求从未被标记为已分配给开发人员。

答案2

正如我对此问题的封闭 SO 版本所评论的那样,我对 Nushell 也有类似的问题。不幸的是,我不知道任何 shell (或非 shell) 实现中是否有支持查找器本身中的多行内容的模糊查找器。

fzf这不是最佳选择,但我使用 Nushell 时有一些解决方法。其中的“预览”功能fzf可以修改结果,您可以使用它将历史记录重新转换为格式正确、多行(甚至语法突出显示)的结果。在 Nushell 中,nu-highlightFish 的内置功能fish_indent --ansi基本上可以做同样的事情(而且更好一些,因为它可以正确缩进)。这至少可以将“Finder”中的单行输出转换为更易读的多行​​预览。

您可以在 Fish 命令行测试的命令的一般格式是:

commandline --replace $(history --null | fzf --read0 --preview "echo {} | fish_indent --ansi")

还,这个fzf插件对于 Fish 来说,预览已经启用,但我建议将预览窗口设置到右侧,以便您可以看到尽可能多的线条。

fzf 与 Fish 的截图

相关内容