shell 中的 CTRL+R - 如果我跳过了我想要的命令,我该如何回到它?

And*_*rew 4 search keyboard-shortcuts bash shell command-history

我正狂热地按CTRL+R来查找我不久前使用过的一些命令,但突然间我找到了它。通过反射,我继续点击CTRL+ R,将它传递给 shell 历史中更远的东西。如何返回我刚刚通过的命令,而不必重新开始整个搜索?

Ant*_*gan 8

Bash 使用的Readline库提供了通过 shell 历史向后搜索的Ctrl+R功能。在历史中向前搜索的相应函数默认绑定到+ 。CtrlS

然而,问题是该终端已经驱动使用该组合键流量控制:按压Ctrl+S 停止或暂停文本被打印到端子和Ctrl+Q 恢复发送给终端装置的字符的流动。

对于 GNU/Linux 系统上的大多数终端设备,默认情况下这些设置是打开的,结果是 Bash/Readline 永远不会看到Ctrl+S键序列,因为它被终端驱动程序捕获并且永远不会传递给 shell。

可以通过运行以下命令禁用此行为(也称为XON/XOFF 流控制):

stty -ixon
Run Code Online (Sandbox Code Playgroud)

现在Ctrl+S键组合将传递给 Bash/Readline。

替代组合键

如果您希望 Readline 使用不同的组合键来搜索forward,请使用该bind命令启用不同的键绑定,例如Ctrl+ F(用于 Forward)。注意:所有引号都是必需的。

bind '"\C-f": forward-search-history'
Run Code Online (Sandbox Code Playgroud)

修改配置以保留这些更改

终端流量控制在现代设备上并不是特别有用,所以我建议在启动新终端或伪终端设备时运行以下命令:

stty -ixon
Run Code Online (Sandbox Code Playgroud)

.bashrc运行此命令可能是一个很好的启动文件,因为该文件是为交互式 Bash shell 提供的。如果.bashrc不是来自.profile.bash_proflestty则应将上述命令添加到用于登录 shell 的任何启动文件中。

Readline 配置文件是.inputrc如果您更喜欢使用不同的键绑定(例如Ctrl+)F向前搜索历史记录:

bind "\C-f": forward-search-history
Run Code Online (Sandbox Code Playgroud)

相关链接