在我使用过的几乎所有现代命令行环境中,您都可以按向上箭头返回历史记录中的几个命令并重新运行较早的命令。但在我使用过的一些命令行环境中,在执行此操作后的下一个命令提示符下,您还可以按向下箭头从上一个命令在历史记录中出现的位置浏览历史记录。
例如,假设你这样做:
$ vi mysource.c
$ make
$ make test
然后假设您的测试失败,并且您想要再次执行这些步骤,因此您按向上箭头 3 次以返回到vi mysource.c
,然后按return运行它。然后,在那之后的下一个提示符下,我希望能够按向下箭头一次以到达make
。在那之后的下一个提示符下,我希望按向下箭头一次以到达make test
。
我不知道这是否归结于 Mac OS X 的默认bash
设置,或默认的 Terminal.app 设置,或者什么,但这个“在新的提示下点击向下的箭头从上次使用历史记录的位置向下浏览历史记录”功能默认情况下未启用。
我浏览了bash(1)
手册页并发现:
forward-search-history (C-s)
...但^S
似乎什么也没做。不确定它是否被 Terminal 当作老式程序来吞并了XOFF
(尽管它似乎没有暂停终端输出)。
其他几点说明:
- 我在使用 Mac OS X Snow Leopard 10.6.6。
- 我已经知道很多其他有趣的方式来处理 shell 历史记录,这只是我现在试图实现的一个特定方法。
- 虽然任何指向正确方向的指示都会有所帮助,但已知在 Terminal.app 中适用于 10.6.x 的解决方案
bash
将会非常有帮助。
答案1
^S
^R
与(完成 后)相反^R
。您可能需要执行stty -ixon
来禁用该XOFF
行为。
最接近您要查找的内容的是^O
(readline operate-and-get-next
)。按向上箭头检索上一个命令,^O
然后按 而不是。该命令将被执行。当再次发出提示时,历史记录中的下一个命令将放在命令行上。此时Enter
您可以使用箭头、Enter 或。^O
答案2
根据您的 stty 版本,您可能需要“stty flush undef”。(目前 OS X stty 手册页记录了“flush”,但 stty -a 输出仍显示“discard”的值。)
当您认为可能还需要下一个命令时,请使用 ^o 从历史记录中执行命令。如果您确实需要它,只需重复 ^o。如果您最终不想要它,那么您可以使用 ^p、^n、^s 等从该点在历史记录中移动,或者使用 ^u 清除命令行。