我最近从 bash 切换到 zsh。在 bash 中,我用来查找以前运行的命令的一种方法(除了递归搜索)是history | grep whatever,whatever我记得的命令位在哪里。
在 zsh 中,这不起作用。history尽管我的.zsh_history文件包含许多条目,但我已将其配置为执行此操作,但仅返回少数项目。
如何输出我的整个历史,适合搜索grep?
Kyl*_*ndt 107
History 接受 zsh 条目中的一个范围作为[first] [last]参数,因此要让它们全部运行history 0。
要获得 zsh 帮助(至少记住)Alt-h,请在 history 命令上键入,这将显示内置帮助。
wjv*_*wjv 26
接受的答案是正确的,但值得注意的是,您不需要调用外部grep二进制文件来进行搜索,因为该功能已内置。我在我的.zshrc.
histsearch() { fc -lim "*$@*" 1 }
Run Code Online (Sandbox Code Playgroud)
笔记:
fc是控制交互历史的 zsh 内置函数。 history相当于fc -l。
该-m标志需要一个模式,该模式必须被引用。
该-i标志添加了时间戳。
fc还有更多的技巧(例如,将搜索限制为当前会话的内部历史记录)。请参阅zshbuiltins(1)手册页或官方文档。
编辑 (2021-01-27):
使用此方法比仅对 zsh 历史文件进行 grep 的主要优点是您可以通过-i. 当然,这仅在您首先启用将时间戳保存到历史文件时才有效:
setopt EXTENDED_HISTORY
Run Code Online (Sandbox Code Playgroud)
多年来,我还在-D我的函数中添加了标志,它显示了历史命令的运行时间。(这又依赖于EXTENDED_HISTORY。)另外,我已将函数重命名为hgrep,我发现它更容易记住:
hgrep () { fc -Dlim "*$@*” 1 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63072 次 |
| 最近记录: |