我急切地按下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