tsh*_*ang 6 bash command-history
有时当我CtrlR搜索命令历史时,我发现我没有找到我正在寻找的条目,即使我知道它在历史中。我想这是因为我通过了入口,迫使我使用另一个命令去另一个方向。是否有一个命令允许在到达结束时通过循环(重新开始循环)来搜索整个历史?
您可以使用Alt+>返回到历史记录的末尾,然后再次搜索,但也许您知道这一点,而这不是您想要的。
不幸的是,我认为没有办法让它环绕。
我在man bash或中看不到任何有关它的信息man readline。
我们可以尝试编写一个readline宏,但没有变量告诉我们我们所处的历史线。
简而言之,这里有一些其他建议,您可能会找到可行的替代方案:
如果您的终端配置为发送Ctrl+ S, (例如通过运行stty stop undef),那么您只需按Ctrl+即可更改方向S。
您可以使用history | grep <whatever>then 类型!<number from left column>来运行它。
如果输入太长,请将其设置为保存一些输入的功能,例如
hgrep() {
history | grep "$@"
}
Run Code Online (Sandbox Code Playgroud)
设置history-search-backward和history-search-forward。它们可以更容易使用。
例如ls Alt+ P, Alt+ P, Alt+P 将通过您的所有ls命令向后搜索。
另外,您只需按其他快捷方式,例如,如果你在最古老的命令,你可以从按下开关改变方向Alt+P紧迫Alt+ N。
通过将其放入您的/etc/inputrc或.inputrc为来设置它bash:
$if mode=emacs
"\ep": history-search-backward
"\en": history-search-forward
$endif
Run Code Online (Sandbox Code Playgroud)
这在您的.zshrcfor 中zsh:
bindkey -M emacs '^[p' history-beginning-search-backward
bindkey -M emacs '^[n' history-beginning-search-forward
Run Code Online (Sandbox Code Playgroud)
您甚至可以更进一步,使向上箭头执行此操作。
最后,您确定该命令正在进入历史记录吗?可能由于HISTCONTROL或HISTIGNORE设置而被忽略,或者由于HISTSIZE?