Answers:
使用Ctrl+ o代替Enter运行命令将运行历史记录中的命令,然后将下一个队列排队,而不是返回bash历史记录的前面。
vi
行编辑(启用set -o vi
)或emacs
?由于Ctrl-O
不会与前者据我可以告诉工作。
bind "\C-o":operate-and-get-next
(或后添加一切bind
到~/.inputrc
)
乔恩·莱因霍尔德(Jon Reinhold)的回答很好,但是我建议有一个更强大的解决方案。我在乔恩(Jon)的回答中也有一个评论,但是我没有足够的声誉可以直接发表评论,因此@Jon Reinhold,如果您阅读此书,请在下面给我留言。
Bash包含一个命令fc
,该命令将bash历史记录列表的行号作为参数。然后,它将使用这些行作为文本打开您的默认编辑器。此时,您可以选择编辑行。然后,当您退出编辑器时,bash将执行这些行!
您可能要进行的编辑的一个示例是将除最后一行之外的所有内容追加到诸如“; read -p” next ...“之类的末尾,这将使bash执行每一行,并在继续之前提示您。
乔恩·莱因霍尔德(Jon Reinhold)的评论:好的答案,但是您应该使它符合条件,因为如果用户将bash变量HISTCONTROL设置为include
erasedups
,那么执行C-o
该操作后,用户将感到困惑,因为该命令不是显示历史记录中的预期下一个命令,而是该命令之后的命令。将显示。这是因为bash删除了已执行命令的原始实例,因此之后的所有命令都上移了一行,即。到历史记录列表中的下一个索引号。
fc
早都Ctl-o
和bash
自己。(与该答案相反,它的用处也较小。)
erasedups
显然是一个bash错误(可能已经针对这种情况进行了准备)。很高兴知道。
完成你想要的行为另一种方法是,以熟悉bash的readline的快捷方式(其中CTRL- o是一个我相信)和bash历史搜索。
CTRL- r带您进入bash命令历史记录搜索,您可以在其中开始键入要搜索的命令,bash会自动为您完成命令。自动完成功能确实非常不错。当您要运行的命令在输入行上时,您可以ENTER运行该命令,或按CTRL- e键将光标移至命令行末尾并退出历史记录搜索模式。
有很酷的事情CTRL- e在这一点上是历史缓冲区设置情境此命令。现在,下一个和上一个命令是在历史记录搜索为您找到的行之前和之后运行的命令。您可以按向上或向下箭头并抓住下一个命令。
历史记录搜索功能非常强大,并且是避免使用向上箭头首先返回到命令的一种好方法。快速的历史记录搜索可以节省大量时间来手动搜索历史记录,然后您可以继续进行操作CTRL- o就像上面提到的Jon一样。
如果您希望提高整体bash效果,建议您尝试一下箭头键的readline快捷方式。您可能会发现它们更方便并且可以提高键入速度,但是YMMV当然可以。这里还有一些:
这些readline快捷方式(以及CTRL- a行首和CTRL- e行尾)将提高命令行imo的速度和效率。