通过命令过滤 ZSH 历史记录

Posted

技术标签:

【中文标题】通过命令过滤 ZSH 历史记录【英文标题】:Filtering ZSH history by command 【发布时间】:2012-12-11 23:56:38 【问题描述】:

有人告诉我,在 ZSH 中,您可以执行 command 之类的操作,然后当您点击它时,它会根据给定的命令过滤历史记录。但是当我尝试这个时,它只会像 bash 一样循环历史。是否默认禁用?

【问题讨论】:

【参考方案1】:

点击Ctrl+R,输入一些字母,它会找到带有这些字母的上一个命令,按住Ctrl+R继续查看之前的结果。 适用于 bash、zsh(以及我想的其他 shell)。

我个人喜欢的是:输入一些字母,按Up,出现之前以相同字母开头的命令。非常强大,我喜欢它。 您必须将您想要的键绑定到history-beginning-search-backwardhistory-beginning-search-forward

如果还不够,zsh 有很多选择,请尝试查看Zsh Line Editor 并告诉我们。 对于 bash,功能较弱但更常见,Bash commands for history。

【讨论】:

请参阅我的答案,了解与您在第二段中描述的内容非常相似的内容。它进行完整的子字符串搜索,因此它匹配命令的任何部分,但它应该很容易修改为仅从命令的开头匹配。 如果您在 zsh 中使用 Vim 绑定,CTRL+R 将无法正常工作。如果是,请尝试将 bindkey "^R" history-incremental-search-backward 添加到您的 ~/.zshrc 文件中。 请参阅this answer,了解有关将键绑定设置为向上的说明。您需要看起来像bindkey "^[[A" history-beginning-search-backwardbindkey "^[[B" history-beginning-search-forward 的行。不过,您无需输入 ^[[A,而是希望在终端编辑器中按 Ctrl+V、Up 以获取正确的键代码。 我认为 "$terminfo[kcuu1]"(up) 和 "$terminfo[kcud1]" (down) 在几乎任何较新的 dist 上都相当可靠。 对于那些错过快速历史导航/过滤的人,我强烈推荐fzf (github.com/junegunn/fzf),它在stdin 上进行模糊搜索,并通过Ctrl-R 键盘完美集成到zsh / bash快捷方式(以及更多)。【参考方案2】:

使用感叹号:

> !<starts-with this string>

您可以向上/向下箭头浏览所有以它开头的命令。我一直使用 "!v" 来获取我之前用 Vim 打开文件的命令。

除了匹配字符串的开头之外,您还可以使用问号进行搜索,

> !?status

可以找到“git status”。

【讨论】:

这对我不起作用。我输入 !vi 并按向上键,我看到了上一个命令,而不是上一个以“vi”开头的命令。我必须打开一个设置才能让它工作吗? @LarryHastings,你必须先按Enter。然后你可以按Up查看命令历史。 这个语法记录在哪里?【参考方案3】:

使用percol 通过Ctrl-r 动态搜索和浏览您的历史记录。

安装 percol:sudo pip install percol 将zsh-history-search 代码 sn-p 添加到您的 .zshrc 文件中。

Ctrl-r 之后,您可以在同一个窗口中查看整个历史记录。搜索关键字(动态)缩小了该列表的范围。您可以使用键绑定(例如 emacs like 配置)在列表中上下导航并最终做出选择。

这里搜索历史中所有可用的sudo install 命令,并选择了sudo make install

Enter 发出选定的命令。

【讨论】:

【参考方案4】:

在 zsh 中激活 vim 键绑定后,您可以在 vi 命令模式下使用 vi-history-search-backward (/)。

【讨论】:

这真的很棒。然后您可以点击n 转到下一项。不知道如何显示所有内容。 哇,是的,n 将继续向后搜索历史。如果你走得太远,N 会向前搜索。【参考方案5】:

这是fish 中提供的功能,但似乎有人为它制作了zsh plugin。它在标准 ZSH 中不可用。

【讨论】:

【参考方案6】:

我们也可以使用fzf交互模糊搜索命令历史。

安装方法如下:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

对它的所有配置说“是”。之后,重启你的zsh shell,然后按Ctrl-R,哇,交互式命令历史搜索弹出。享受吧!

【讨论】:

【参考方案7】:

如果您不想添加任何键绑定,您可以默认使用 Ctrl+R 向后移动 & Ctrl+ 搜索S 前进。

您可以使用任何快捷键开始搜索 Ctrl+RCtrl+S

【讨论】:

以上是关于通过命令过滤 ZSH 历史记录的主要内容,如果未能解决你的问题,请参考以下文章

ZSH iterm2 增加行数历史

sh 修复损坏的zsh历史记录

记录历史命令,history,命令补全和别名通配符输入输出重定向

终极之shell-zsh全解析

命令历史及“!”的使用

shell 命令,别名,通配符,重定向