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

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

我急切地按下CTRL+R来查找我之前使用过的一些命令,突然我找到了它。我本能地继续按下CTRL+ R,将它传递给 shell 历史记录中的更早的命令。我如何返回到我刚刚传递的命令,而不必重新开始整个搜索?

答案1

Ctrl+功能R用于搜索向后通过 shell 历史记录提供雷德莱恩Bash 使用的库。要搜索的相应函数前锋通过历史记录默认绑定到Ctrl+ S

然而,问题在于终端驱动程序已经使用此组合键流量控制:按Ctrl+S 停止或暂停打印到终端的文本并Ctrl+Q 简历发送到终端设备的字符流。

对于 GNU/Linux 系统上的大多数终端设备,这些设置默认处于启用状态,因此 Bash/Readline 永远看不到Ctrl+S键序列,因为它被终端驱动程序捕获并且从未传递给 shell。

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

stty -ixon

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

备选组合键

如果你希望 Readline 使用不同的组合键进行搜索向前,使用bind命令启用不同的键绑定,例如Ctrl+ F(用于前进)。注意:所有引文都是必需的。

bind '"\C-f": forward-search-history'

修改配置以保留这些更改

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

stty -ixon

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

.inputrc如果您喜欢使用不同的键绑定(例如Ctrl+F进行搜索),则可以使用 Readline 配置文件向前回顾历史:

bind "\C-f": forward-search-history

相关链接

相关内容