在 bash 中输入部分命令后,有没有办法使用 ctrl-r?

在 bash 中输入部分命令后,有没有办法使用 ctrl-r?

在 bash 中,Ctrl+r命令非常有用,我输入Ctrl+ r whatever,它会搜索历史记录中含有单词 的命令whatever。但是,如果我输入whatever并意识到我想搜索该单词并按下Ctrl+,r什么也不会发生。

有没有一种方法,按下一个键并使其表现得好像我输入了Ctrl+r whatever而不是whatever Ctrl+ r

我的 中有以下内容.inputrc

"\C-p": history-search-backward

但这只有当行首相同时才有效。

答案1

您可以轻松地使用已经输入的内容搜索 bash 的历史记录。

假设您刚刚输入curl -I http://superuser.com并忘记先输入Ctrl+ r

$ curl -I http://superuser.com

如果你想对自己的历史记录进行 i-search,转到行首第一的Ctrl+ a),输入 i-search(Ctrl+ r)并输入Ctrl+ y。这将使用您已输入的全部文本内容进行搜索:

(reverse-i-search)`curl -I http://superuser.com': curl -I http://superuser.com/faq

或者,您可以使用Ctrl+w而不是Ctrl+y来仅使用刚输入的文本的第一个单词进行搜索:

(reverse-i-search)`curl': curl -I http://superuser.com/faq

全部绑定到单个键

如果您想通过一次按键完成所有这些操作,可以将单个键绑定到键盘宏。如果您想使用,例如,F12运行:

$ bind '"\e[24~":"\C-a\C-r\C-y"'

这将持续整个会议。

使其永久化

只需在您的中定义宏~/.inputrc

"\e[24~":"\C-a\C-r\C-y"

注意这里我们忽略单引号。

你可能会发现这个答案有用。

答案2

挽救四次进攻:

Ctrl-R通过添加以下内容来避免第二次.bashrc:(或者,如果您愿意,可以添加到您的.inputrc):

bind '"\er":"\C-a\C-r\C-y\C-r"' # alt-r = ctr-a ctr-r ctr-y ctr-r

这将映射ALT-RCTR-A CTR-R CTR-Y CTR-R

描述:

  • ALT-R:绑定键。另一个不错的选择是\C-xrCTR-X CTR-R
  • 点击率:转到行首(记住所写的内容)
  • CTR-R:开始反向搜索
  • 点击率:粘贴什么点击率作为搜索的一部分被记住
  • CTR-R:触发​​迄今为止的字符的反向搜索

相关内容