在bash中键入命令的一部分后,是否可以使用ctrl -r?


13

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

有没有办法敲键并使其表现出好像我键入Ctrl+ r whatever而不是whatever Ctrl+的方式r

我的内容如下.inputrc

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

但这仅在行首相同的情况下有效。

Answers:


12

您可以使用已经轻松键入的内容搜索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"

请注意,此处我们省略了单引号。

您可能会发现此答案很有用。


1
我不确定配置是否有问题,但是c-r键入后c-y不会在其中粘贴任何内容。如果我自己键入内容c-y只是粘贴文本,那么我就无法
将这

你先去行首吗?(Ca)
hso 2012年

1
您是对的,我并不想开始。现在,我在.inputrc中"\C-xr": "\C-a\C-r\C-y",它的效果非常好!感谢您的回答。
凌晨

我认为这是我第三次用Google搜索这个control+a control+r control+y东西!谢谢,这个答案一直在这里!:)
Beco博士

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-R映射到CTR-A CTR-R CTR-Y CTR-R

描述:

  • ALT-R:绑定键。另一个不错的选择是\C-xrCTR-X CTR-R
  • CTR-A:转到该行的开头(记住所写的内容)
  • CTR-R:开始反向搜索
  • CTR-Y:粘贴搜索中记忆的CTR-A
  • CTR-R:使用到目前为止的字符触发反向搜索

我仍然不清楚为什么Cy将该命令粘贴到搜索字段上(Ca应该不应该是“复制”命令,对吗?),以及为什么Cw仅粘贴第一个单词。
marcus

是的,C-a不仅要移动,而且要记住(复制)移动的内容。
Beco博士

我无法确定这种行为(仅尝试使用Ca Cy),我认为Cr内置了某些特殊情况的可能性更大,但我不知道它们的记录位置。
marcus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.