ZSH-输出整个历史记录?


37

我最近从bash切换到zsh。在bash中,我用来查找先前运行的命令的一种方法(除了递归搜索)是history | grep whateverwhatever我记得的命令位在哪里。

在zsh中,这不起作用。history即使我的.zsh_history文件包含许多条目(我已对其进行配置),它也仅返回一些项目。

如何输出我的整个历史记录,适合进行搜索grep

Answers:


48

历史记录接受zsh条目中的范围作为[first] [last]参数,以便使其全部运行history 0

要获取zsh帮助(至少要记住),请键入Alt-hhistory命令,这将显示内置帮助。


3
大!不过,这对我来说是一个令人讨厌的默认设置,因此我将其添加到别名文件中:alias history="history 0"
Nathan Long

7
这不是问题,但在历史列表从1开始,而不是0
ggustafsson

2
我自己使用了这个别名:alias h='history 1 | grep'
Harald Nordgren '16

3
这似乎对我不起作用:我~/.zsh_history有10066行,但history 0(或等价的fc -l 0)仅打印4999行。
jayhendren

2
对于history 1 | grep人们,我希望您知道ctrl+r-有史以来最好的把戏/捷径!
埃米尔·瓦泰

9

可接受的答案是正确的,但是值得注意的是,由于该功能已内置,因此您无需调用外部grep二进制文件即可进行搜索。我在以下函数中定义了此函数.zshrc

histsearch() { fc -lim "*$@*" 1 }

笔记:

  • fc是控制交互历史记录的zsh内置函数。 history等同于fc -l

  • -m标志需要一个模式,必须加引号。

  • -i标志添加时间戳。

  • fc还有很多技巧(例如,将搜索限制为当前会话的内部历史记录)。请参见zshbuiltins(1)手册页或官方文档


更好的方法是使用“ * $ @ *”(请注意附加的星号)模式,而不要使用“ $ @”,因为后者仅产生完全匹配的结果。
Piotr Dobrogost '18年

1
你是完全正确的,@ PiotrDobrogost!我不确定如何以自己的状态提交此答案-我猜我必须从内存中键入该函数。就目前而言,它不是很有用,所以我将编辑答案以包含星号。
wjv

3

看看fzf。它不仅有助于您在外壳程序历史记录中查找“任何粒子”,而且还可以在其他有趣的地方(例如浏览器历史记录,目录历史记录等)中查找。

fzf是命令行模糊查找器。这意味着您可以搜索所需的粒子或分数,并且它将显示匹配项的集合,您可以对其进行不断地完善。这确实是一个改变游戏规则的人。

作者的主页包含许多说明性示例。


考虑添加一些对此答案的参考,以支持您的陈述。
Pimp Juice IT

欢迎来到超级用户!请阅读“ 如何推荐软件”以获取最少的必需信息,以及有关如何在“超级用户”上推荐软件的建议。为了使您的答案有用,即使提供的链接中断,也应将这些详细信息编辑为您的答案。
我说恢复莫妮卡的时间
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.