CtrlBash 提供了通过+进行反向搜索的功能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
。
因此我的问题是:如何在反向搜索中导航?
答案1
您可以通过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 后如何解冻?以及一些答案
更改键绑定
如果您不想更改 的默认行为,可以更改with 的ctrl+s键绑定。由于大多数键已经在 bash 中定义,您可能需要发挥创意:forward-search-history
bind
bind "\C-t":forward-search-history
这将绑定ctrl+t到前向搜索历史记录,但请注意,默认ctrl+t运行transpose-chars
答案2
作为 bash 提供的基本反向搜索和正向搜索的替代方案,您可能需要研究:
弗兹夫,一个自我描述的“命令行模糊查找器”。
它可以取代 bash(和其他终端)的默认反向搜索。
它的好处在于:
- 打印历史命令的列表
- 再次按 Ctrl + R 切换按时间顺序或相关性排序
- 可以通过箭头键(或 Ctrl + J / Ctrl + K)导航
- 允许搜索多个针
我的工作流程现在完全依赖于 fzf,而不是我控制的机器上的基本反向搜索。