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

ske*_*ept 14 bash shell emacs key-binding readline

在 bash 中,Ctrl+r命令非常有用,我输入Ctrl+r whatever并在我的历史记录中搜索包含单词的命令whatever。但是,如果我输入whatever并意识到我想搜索该词并点击Ctrl+r没有任何反应。

有没有办法按下一个键并让它表现得好像我输入了Ctrl+r whatever而不是whatever Ctrl+ r

我有以下内容.inputrc

"\C-p": history-search-backward
Run Code Online (Sandbox Code Playgroud)

但这仅在行的开头相同时才有效。

小智 12

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

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

$ curl -I http://superuser.com
Run Code Online (Sandbox Code Playgroud)

如果您想对历史进行 i-search,请先转到行( Ctrl+ a),输入 i-search ( Ctrl+ r) 并键入Ctrl+ y。这应该使用您已经输入的整个文本的内容进行搜索:

(reverse-i-search)`curl -I http://superuser.com': curl -I http://superuser.com/faq
Run Code Online (Sandbox Code Playgroud)

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

(reverse-i-search)`curl': curl -I http://superuser.com/faq
Run Code Online (Sandbox Code Playgroud)

将其全部绑定到一个键

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

$ bind '"\e[24~":"\C-a\C-r\C-y"'
Run Code Online (Sandbox Code Playgroud)

这将持续到会议。

使其永久化

只需在您的~/.inputrc:

"\e[24~":"\C-a\C-r\C-y"
Run Code Online (Sandbox Code Playgroud)

请注意,这里我们省略了单引号。

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