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