【问题标题】:can Bash be configured to search string on the current input line?可以将 Bash 配置为在当前输入行上搜索字符串吗?
【发布时间】:2009-10-07 04:58:54
【问题描述】:

用于在使用命令行时快速定位位置(是的,我是 Emacs 粉丝)。在查看 Bash 的人之后,我找不到这样的提示。是否需要修改readline的源代码来支持?

非常感谢!!

【问题讨论】:

    标签: bash readline


    【解决方案1】:

    CTRL-r (reverse-i-search) 将允许您搜索当前行以及历史记录中的任何内容。

    如果你想跳回几个参数,你可以点击空格,然后再次 CTRL-r 来“再次查找”。 Escape 会用光标在最后一个搜索结果上跳出来。

    【讨论】:

    • OP 要求在 current 输入行上进行搜索
    • 这是一个非常有用的答案。作为一个经常输入长命令然后只想更改一件事的人,我经常使用它。对我来说,它比C-x C-e 的破坏性要小得多。
    【解决方案2】:

    我不知道直接在命令行中执行此操作的方法,但 bash 确实支持在您选择的编辑器中打开命令行的按键。来自 bash 手册页:

       edit-and-execute-command (C-xC-e)
              Invoke  an  editor  on the current command line, and execute the
              result as shell commands.   Bash  attempts  to  invoke  $FCEDIT,
              $EDITOR, and emacs as the editor, in that order.
    

    因此,在 emacs 绑定模式(默认)下按 CTRL-x CTRL-e 或在 vi 绑定模式下按 ESC v(set -o vi)将在上述环境变量指定的编辑器中打开现有命令行。您可以编辑命令行,一旦您保存并退出编辑器,该命令就会被执行。

    【讨论】:

    • 这个问题是无论你保存还是:q!,命令都会执行。所以如果你想要一个 noop - 删除所有内容!
    • @crizCraig :q! 在 vi​​m 中将直接退出而不保存,所以据 bash 所知,您只是没有进行任何编辑。上次保存的内容将是执行的命令,并且“上次保存的”开始于您告诉 bash 在编辑器中打开它时命令行上的任何内容。但是,有一个例外:如果您的编辑器返回一个非零状态,bash 将 执行该命令。您可以在 vim 中使用 :cq 执行此操作。一个奇怪的地方是:在调用编辑器之前命令行中的任何内容仍将添加到您的历史记录中,即使它从未执行过。
    • 这可能会成为我最喜欢的 Bash(和 ZSH)键盘快捷键。
    猜你喜欢
    • 2021-10-09
    • 2014-05-08
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多