在bash中使用Control-r反向搜索:如何在Cygwin中“重置”搜索?

时间:2009-02-14 21:12:13

标签: bash cygwin readline

问题:如何判断 Ctrl + r 反向搜索“重置自身”并从底部开始搜索你每次的历史?

背景:在Bash中使用反向搜索时,一旦完成对历史记录的搜索,我就会陷入困境,而且找不到更多匹配项。有时我点击 Esc 并再次重新调用 Ctrl + r ,期待它从我的历史记录底部开始一个全新的搜索。然而,“指针”似乎仍然在我历史上的前一个地方。

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

更新:我想我应该提到我在Windows上使用Cygwin,因为目前提到的解决方案都没有。

更新:此问题已标记为potential duplicate question。由于以下原因,这个问题不重复:

  • 备用问题不涉及Cygwin。
  • 备用问题不涉及如何重置搜索到其初始状态(相反,它只处理搜索和转发中的向后)。

4 个答案:

答案 0 :(得分:32)

我的bash按照你的预期工作。也许点击“ctrl + C”而不是“esc”可以提供帮助。

此外,您可以使用“ctrl + s”

向前搜索

编辑:如果ctrl + s没有向你的终端发送“停止”,即如果“stty -a”给你“-ixon”,则它可以正常工作。你可以用“stty -ixon”来改变它。感谢@Phil提醒。

答案 1 :(得分:22)

我在试用Escape时从未尝试将其设置为默认值,但bash使用readline作为输入,默认情况下接受Emacs样式的键绑定,因此您可以使用M->(通常为通过组合Meta / Alt和>或使用Escape键和>)。

如果M->无效,因为您的终端无法输入,请尝试^G(同时控制和G)。这是Emacs中的“取消”笔划,通常也适用于readline

答案 2 :(得分:14)

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

要重置ctrl-r,通常的emacs键ctrl-g可以执行。如果你想将ctrl-r反向一步,而不是再次从底部向上,你可以使用 ctrl-s 。诀窍是ctrl-s也用于暂停终端。所以你需要将它分配给另一个键。例如,以下内容将暂停设置为ctrl-w(并使用ctrl-q保持“resume”)。

$ stty STOP ^w

或者,您也可以通过

完全禁用XON / XOFF(恢复/暂停)流控制字符
$ stty -ixon -ixoff

这也将释放ctrl-s。要重新启用暂停/恢复,您可以执行

$ stty ixon ixoff

答案 3 :(得分:2)

M-> ... moves to end of history
M-< ... moves to start of history

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

man readline更多readline指令。