61

您如何告诉Ctrl+ Rreverse-i-search “重置自身”并每次从历史底部开始搜索?

背景:在 Bash 中使用 reverse-i-search 时,一旦完成对历史的搜索,我总是卡住并且找不到更多匹配项。有时我会再次点击Esc并重新调用Ctrl+ R,期望它从我的历史底部开始新的搜索。然而,“指针”似乎仍然在我历史上它离开的前一个地方。

问题是,我通常不希望这种行为。如果我点击Esc,然后重新调用Ctrl+ R,我希望它表明它应该再次从底部重新启动并重新开始工作。

我在 Windows 上使用 Cygwin,因为到目前为止提到的解决方案都不起作用。


此问题被标记为可能重复的问题。这个问题不是重复的,原因如下:

  • 另一个问题不涉及 Cygwin。
  • 替代问题不涉及如何将搜索重置为其初始状态(相反,它仅涉及在搜索中向后和向前移动)。
4

4 回答 4

34

我的 Bash 按您的预期工作。也许打Ctrl+C而不是Esc可以提供帮助。

此外,您可以使用Ctrl+向前搜索S

Ctrl+S如果它没有向您的终端发送“停止”,即如果“stty -a”为您提供“-ixon”,则它可以工作。你可以通过“stty -ixon”来改变它。

感谢@Phil 的提醒。

于 2009-02-14T21:46:12.270 回答
26

我从未尝试在点击时将其设为默认值Esc,但 Bashreadline用于输入,默认情况下它接受 Emacs 样式的键绑定,因此您可以使用M->(通常通过组合 Meta/Alt>或在键后跟随Esc>)进入底部。

如果M->由于您的终端不允许您输入而不起作用,请尝试^GCtrlG同时)。那是 Emacs 中的“取消”笔划,通常readline也可以使用。

于 2009-02-14T21:47:51.923 回答
16

我得到了这个问题的确认答案。

要重置Ctrl+ R,通常的 Emacs 键Ctrl+G可以做到。如果您想将Ctrl+反转R一步,而不是再次从底部向上移动,您可以使用+ CtrlS

诀窍是Ctrl+S也用于暂停终端。因此,您需要将其分配给另一个键。例如,以下将暂停设置为Ctrl+ (并使用+W保持“恢复” )。CtrlQ

$ stty STOP ^w

或者,您也可以通过以下方式完全禁用 XON/XOFF(恢复/暂停)流控制字符

$ stty -ixon -ixoff

这也将释放Ctrl+ S。要重新启用暂停/恢复,您可以执行

$ stty ixon ixoff
于 2010-07-15T06:53:18.703 回答
3
M-> ... moves to end of history
M-< ... moves to start of history

您的左键Alt很可能是您的元键。

用于man readline更多的 readline 指令。

于 2009-02-14T21:47:07.480 回答