更改 Windows shell 命令历史记录检索的顺序

更改 Windows shell 命令历史记录检索的顺序

在 MS-Windows 下的命令行中令我抓狂的事情之一是当您使用向上和向下箭头键时 Windows shell(标准 shell 和 PowerShell)从历史记录中检索命令的顺序。

我逐渐喜欢的标准方法是,将最后一个命令放入历史堆栈中,然后按“向上”将检索我运行的最后一个命令,再次按“向上”将检索上一个命令,依此类推。如果您从历史记录中选择一个命令并再次提交,则该命令将被复制到堆栈顶部,如果您在下一个提示符下按“向上”,则可以看到最后一个命令,然后是倒数第二个命令。如果在浏览历史记录后按“向下”键,跳过历史堆栈中的最新命令,您将返回到空提示符(或在您开始浏览历史记录之前的任何内容)。

在 Windows shell 中,它的工作方式有点奇怪:如果历史记录中有 3 条命令 - 例如,我们称它们为“A”、“B”和“C” - 并且您使用向上箭头键选择命令“B”并再次执行,然后在下一个提示符下再次使用向上箭头键,shell 将显示“B”。但这不是您执行的最后一个命令(尽管“B”确实再次被复制到历史记录堆栈中),因为如果您再次按“向上”键,您将看到“A”而不是“C”。如果您向下浏览(到后面的条目),您将再次看到“B”,然后是“C”,然后是“B”,这是最后输入的命令 - 但您也无法再往前走了:除了删除行上的内容或按 CTRL-C 之外,无法返回到空提示符。

我的问题是 - 是否有一些设置可以改变这种行为?

我知道只需获取 bash 或类似的东西并在 Windows 上使用它就可以了,但由于外部限制(例如 - 我需要用它来编写脚本),我必须在 PowerShell 或可以调用 PowerShell 脚本的其他 Windows shell 中工作。

答案1

还有一种不同的方法来控制历史堆栈,它不是您想要的,但它是您应该检查的另一个选项。

在属性(或默认)中,当您右键单击左上角时,有一个选项“丢弃旧的重复项”,勾选它,堆栈将改变其行为。

在您的示例中,执行"A", "B", "C"。 然后两次执行"B",堆栈将看起来: "B","C","A" (first up will be "B")

答案2

另外,别忘了F7。这会弹出一个DOS显示命令历史记录的 -style 菜单(按 ESC 键可使其消失)。将显示输入的或使用向上箭头选择的“最后”命令,因此您将立即看到您在向上/向下箭头上下文中的位置。

显然这是来自一种叫做道斯基,一个文档记录不全的实用程序。例如,除了按向上、向下然后按 Enter 来执行命令之外,我发现按向右或向左箭头键会将其置于提示符下而不执行(因此您可以编辑它)。PgUp/PgDn/Home/End 将以明显的方式浏览列表,我刚刚发现(没有看到任何地方有文档记录)如果您按下命令的第一个字母,它将循环显示以该字母开头的命令(因此,键入命令就像按一样ze fun start now!轻松跳转到历史记录中的该点)。zF7

也许,如果人们预见到历史的重演,也许最好

doskey /history > editme.bat

而不是遭受攻击和箭,然后从所述记录中复制/粘贴(或让你的奴才将其制作成脚本)。

还有其他一些命令提示符技巧Joel Spolsky 的文章中可能并不广为人知。我不知道通配符扩展,因此您可以通过键入名称的最后一个字符或中间字符来使用制表符补全。

我觉得 Windows 提示很古怪,但认为它是死胡同,只有当它看起来会减少我与它的互动时,我才会学习这些琐事。如果有机会,我相信最好安装 cygwin 以获得更具表达力的 shell 和更少烦人的环境,以及您可以在其他地方使用的技能和脚本。

相关内容