And*_*rew 4 search keyboard-shortcuts bash shell command-history
我正狂热地按CTRL+R来查找我不久前使用过的一些命令,但突然间我找到了它。通过反射,我继续点击CTRL+ R,将它传递给 shell 历史中更远的东西。如何返回我刚刚通过的命令,而不必重新开始整个搜索?
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_profle
,stty
则应将上述命令添加到用于登录 shell 的任何启动文件中。
Readline 配置文件是.inputrc
如果您更喜欢使用不同的键绑定(例如Ctrl+)F来向前搜索历史记录:
bind "\C-f": forward-search-history
Run Code Online (Sandbox Code Playgroud)