【问题标题】:Unable to forward search Bash history similarly as with CTRL-r无法像使用 CTRL-r 一样转发搜索 Bash 历史记录
【发布时间】:2010-10-21 23:06:49
【问题描述】:

我正在尝试像使用 CTRL-r 一样搜索我的 bash 历史记录,但要向前搜索。

当我经常敲击一次 CTRL-r 以再次找到上一个命令时,这对我来说很痛苦。

如何像反向搜索一样向前搜索 Bash 历史记录?

【问题讨论】:

    标签: bash search


    【解决方案1】:

    您也可以向前搜索。来自 bash 信息手册,“8.2.5 Searching for Commands in the History”:

    要在历史记录中向后搜索特定字符串,请键入 C-r。 输入 C-s 搜索历史记录。

    然而,Ctrl-S 的问题是有时会与 XON/XOFF 流控制发生冲突(例如在 Konsole 中)。然而,搜索是一项 readline 功能,您应该能够将其绑定到其他一些键。更新:更简单更好的是通过运行来禁用 XON/XOFF

    stty -ixon
    

    【讨论】:

    • 这很棒,但我将 stty -ixon 添加到我的 .profile 中,它似乎不适用于新标签。关于如何使这项工作的任何想法?我希望默认禁用 XON/XOFF。
    • 如果其他人遇到与我相同的问题 - 如果您将其添加到 .profile 中,它不会生效。只有当您将其添加到 .bash_profile 时才会发生奇迹!感谢您的精彩提示 - 多年来这一直让我发疯。
    • @JohnGallagher 需要注意的是,.bash_profile.profile 仅用于登录 shell。我会把它放在.bashrc(我来自.profile)。
    • [[ $- == *i* ]] && stty -ixon可以用来避免问题described here
    • 如果您正在使用 PuTTY 并且不能/不想在您连接的每台计算机上维护 .bash_profilethis answer on superuser 将是一种享受。
    【解决方案2】:

    恕我直言,最好的技巧是使用pguppgdown 启用。把它放在你的~/.inputrc

    "\e[5~": history-search-forward
    "\e[6~": history-search-backward
    

    注销/登录,输入第一个字母,然后输入pguppgdown 以搜索历史记录

    ctrl-R 搜索所有包含单词的行,而 history-search-forward 搜索以单词开头的行

    【讨论】:

    • 您也可以在/etc/inputrc 中取消注释这两行(例如在 Ubuntu 中)。
    • 我更喜欢将它绑定到上下箭头:"\e[A": history-search-backward and "\e[B": history-search-forward
    • 如果这在 bash 中不起作用怎么办?
    • @Sören 这适用于 bash(测试版 4.4.20)。请确保将其放入 ~/.inputrc/etc/inputrc。如果放在任何 bashrc 文件中,这将不起作用,因为它不是命令,而是配置选项。
    【解决方案3】:

    您可能想尝试https://github.com/dvorka/hstr,它允许使用(可选)基于度量的排序对 Bash 历史进行“建议框样式”过滤,即它在向前和向后方向上都更加高效和快速:

    bound 可以轻松地 Ctrl-r 和/或 Ctrl-s

    【讨论】:

    • 我恋爱了。在 Ubuntu 上安装的快速说明:sudo add-apt-repository ppa:ultradvorka/ppa; sudo apt-get update; sudo apt-get install hh; hh --show-configuration >> ~/.bashrc;
    【解决方案4】:

    我通常在终端按ESC,然后按>。它至少会重置,然后您可以尝试少点击CTRL+R

    【讨论】:

    • s/click/press/ 另外,您需要按两次退出(第一次退出向后搜索)。
    【解决方案5】:

    另一种解决方案是使用:

    history | grep <searched expression>

    【讨论】:

      【解决方案6】:

      正如许多人所经历的那样,ctrl+s 冻结(并且 ctrl+q 解冻)终端,因为software flow control(XON/XOFF 流控制),您可以按照接受的答案中所述禁用它。

      虽然我不能说我真的有意使用了该功能,但我确实希望该选项能够暂停快速移动的终端文本流,因此我不想完全禁用它。

      所以我没有关闭它,而是通过在我的 .bashrc 中放置以下内容来重新启动 xoff 函数

      stty stop '^P'
      

      将 xoff 绑定到 ctrl+p (并且 ctrl+q 仍然解冻)。我使用“p”表示“暂停”,这确实掩盖了 bash 先前的命令函数previous-history。就我个人而言,我总是使用向上箭头键,所以这对我来说并不重要,但你可以选择不同的键。

      这会自动为forward-search-history释放ctrl+s

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-09
        相关资源
        最近更新 更多