通过命令筛选ZSH历史记录

57

有人告诉我在ZSH里可以这样做:command,然后按上箭头会根据给定的命令过滤历史记录。但是当我尝试时,它只是像bash一样循环显示历史记录。这是默认禁用的吗?

7个回答

100

按下 Ctrl+R,输入一些字母,它会找到包含这些字母的前一个命令,继续按下 Ctrl+R 可以继续查找前面的记录。
适用于 bash、zsh(和其他 shell 吧)。

我个人喜欢的是:输入一些字母,按下 Up,出现以相同字母开头的前一个命令。非常强大,我很喜欢。
你需要将要使用的键绑定到 history-beginning-search-backwardhistory-beginning-search-forward

如果这还不够,zsh 有许多选项,请尝试查看 Zsh 行编辑器 并告诉我们。
对于 bash,历史记录功能不如 zsh 强大,但更为常见,请参阅 Bash 历史命令


1
看到你第二段描述的内容,我有一个非常类似的答案。它可以进行完整的子字符串搜索,因此可以匹配命令的任何部分,但很容易修改为仅匹配命令开头的部分。 - Frost
28
如果你在zsh中使用Vim绑定键,那么CTRL+R快捷键不能直接使用。如果是这样的话,可以尝试将bindkey "^R" history-incremental-search-backward添加到你的~/.zshrc文件中。 - croceldon
6
参见此答案以获取设置向上键绑定的说明。你需要找到类似于bindkey "^[[A" history-beginning-search-backwardbindkey "^[[B" history-beginning-search-forward这样的行。在终端编辑器中,你需要按Ctrl+V,再按向上箭头来获得正确的键码,而不是直接键入^[[A - jtpereyda
1
"$terminfo[kcuu1]"(上)和"$terminfo[kcud1]"(下)在任何较新的发行版上都非常稳定。 - zzxyz
对于那些想念快速历史记录导航/过滤的人,我强烈推荐使用 fzf(https://github.com/junegunn/fzf)。它可以在 stdin 上进行模糊搜索,并通过 Ctrl-R 键盘快捷键(以及其他方式)完美地集成到 zsh / bash 中。 - DimG

12

使用感叹号!

> !<starts-with this string>
你可以使用箭头键向上/向下浏览所有以该命令开头的命令。我一直使用"!v"来获取我的先前命令,以便在Vim中打开文件。
你也可以使用问号搜索字符串的开头之外的部分。
> !?status

可以找到 "git status"。


5
这对我没用。我键入 !vi,按上箭头,看到的是之前的命令,而不是以“vi”开头的命令。我需要打开某个设置才能使其工作吗? - Larry Hastings
@LarryHastings,您需要先按下“Enter”键。然后您就可以按“上箭头”来查看命令历史记录了。 - Jeff Fairley
2
这个语法在哪里有文档记录? - bennlich
这个扩展的手册已经记录在 man 页面上了,即 man zshexpn,搜索 !?。另请参阅 man 页面的源代码: https://github.com/zsh-users/zsh/blob/master/Doc/Zsh/expn.yo#L170 - ricma

8
我们也可以使用fzf进行交互式模糊搜索命令历史记录。
以下是安装步骤:
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

同意所有配置。然后重新启动您的zsh shell,并按下Ctrl-R,哇,交互式命令历史记录搜索弹出。享受吧!


7
使用percol动态搜索和浏览历史纪录,快捷键是Ctrl-r
  • 安装percol:sudo pip install percol
  • zsh-history-search代码片段添加到您的.zshrc文件中。

Ctrl-r后,您可以在同一窗口中查看整个历史记录。动态搜索关键字会缩小列表。您可以使用键绑定(如emacs样式配置)在列表中上下移动,最终进行选择。

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

percol_history_search_example

Enter发出所选命令。


6
在zsh中启用vim按键绑定后,当处于vi命令模式时,您可以使用vi-history-search-backward(/)进行搜索。

3
这真的很不错。然后你可以按“n”键跳到下一项。不确定如何显示所有内容。 - James O'Brien
哇,是的,n 将会继续向后搜索历史记录。如果你走得太远,N 将会向前搜索。 - PythonJin

5
那是在 fish 中可用的一个功能,但似乎有人为此制作了一个zsh插件。它不在标准ZSH中可用。

2

如果您不想添加任何快捷键绑定,您可以使用Ctrl+R向后搜索,使用Ctrl+S向前搜索。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接