如何在bash的反向搜索中导航?


40

Bash提供了通过Ctrl+ 反向搜索的功能R。然后可以键入命令的一部分,它将显示历史记录中的合适条目。

假设这是我的历史:

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

我搜寻foo。再次点击Ctrl+将R显示下一个适合的搜索条目。我经常会想到,我太快了,无法浏览预期的结果并vim foo3显示出来,现在我想回到vim foo2

因此,我的问题是:如何在反向搜索中导航?


您使用哪个终端?例如。gnome-terminal,konsole,等等...
varesa 2012年

1
好吧,我不太熟悉...密钥应该是ctrl + S,但是某些终端在反向搜索之前似乎已经吃掉了该密钥
varesa 2012年

Ctrl + Shift + R-向前搜索,而Ctrl + R
devansvd


Answers:


36

您可以通过forward-search-history默认绑定到的函数来访问它ctrl+s。不幸的ctrl+s是,xoff默认情况下它是用来表示信号的,这意味着您不能使用它来更改搜索方向。有两种解决方案,一种是禁用发送xoff/xon信号,另一种是更改forward-search-history

禁用xon / xoff

stty -ixon在您的终端中运行或将其添加到您的~/.bashrc。这使您可以使用ctrl+s使用forward-search-history历史记录功能。

有关控制流的更多信息,请参阅在终端中意外按下Ctrl-S后如何解冻?和一些答案

更改键绑定

如果你不希望更改的默认行为ctrl+s,您可以更改键绑定的forward-search-historybind。由于大多数键已经在bash中定义,因此您可能需要发挥创意:

bind "\C-t":forward-search-history

这将绑定ctrl+t到正向搜索历史,但请注意,默认情况下会ctrl+t运行transpose-chars


我尝试了您的第一个解决方案stty -ixonzsh并且效果很好。但是,在禁用xoff/xon信令方面是否有可能产生有害的副作用?
学生

@student您不能再ctrl+s用于暂停终端输出。如果您以前从未使用过它,那没有问题
Ulrich Dangel 2012年

1
对于它的价值,我选择了第二个解决方案。好东西 !我不知道您可以通过C-s在服务器日志上使用tail时按..非常有用来冻结控制台。整齐!(我希望我能再投票赞成:))
Ashutosh Jindal 2012年

我无法在OSX上使用选项#2。我不得不这样做:bind '"\C-t": history-search-forward'
stiemannkj1,2015年

0

作为bash提供的基本反向搜索和正向搜索的替代方法,您可能需要研究以下内容:

fzf,一个自描述的“命令行模糊查找器”。

它可以替代bash(和其他终端)的默认反向搜索。

它的好处是:

  • 从历史记录中打印命令列表
    • 再次按Ctrl + R切换时间顺序或相关性排序
  • 可以通过箭头键(或Ctrl + J / Ctrl + K)进行导航
  • 允许搜索多个针头

现在,我的工作流程完全依靠fzf来控制我所控制的机器上的基本反向搜索。

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.