为什么Windows控制台会在一段时间后丢失命令行历史记录(向上箭头)?

时间:2009-08-06 21:05:26

标签: windows command-line powershell console cygwin

似乎是随机的:经过一段时间/使用我在Windows Vista上使用的任何控制台后,我无法使用命令行历史记录(或命令缓冲区,如果您愿意...),并且向上或向下箭头不再做任何事情,这意味着历史记录中基本上有0个项目。

我在Cygwin,CMD和PowerShell中看到过这种行为。

有时这种行为适用于在控制台内运行的进程 - Python,MySQL客户端等。

这是Windows中的固有问题吗?某处设置?是否有其他控制台没有这个问题?

ps - 如果您认为这与非编程相关,请参阅有关编程工具的其他问题,例如,几乎所有标记为“eclipse”的内容都涉及如何使用IDE而不是编程。

10 个答案:

答案 0 :(得分:17)

我认为有两种方式。

1)Far Manager 是shell的不错选择。即使您不需要它的全部功能(文件/存档管理,编辑器,大量插件,宏),您也可以将它用作cmd,tcc,sh或任何其他程序,shell或命令处理器的包装器/执行器。

例如

  • 从distrib(Far2或Far3)获取3个文件:far.exe,fareng.lng和(可选)fareng.hlp
  • 运行“far.exe / w”,按 Ctrl + B Ctrl + O
  • 在命令行中输入任何命令:dir,set,notepad,putty,依此类推......

历史记录将在会话之间保留,您可以通过 Alt + F8 访问它(按 Ctrl + Alt + F 将历史记录切换到过滤模式)。

远程2.0在注册表中存储历史记录(和设置)。

远程3.0在SQLite数据库中存储历史记录,并且可以是可移植的。

此外,远程可以从历史记录或磁盘中的文件/路径自动完成命令。还有插件(YAC)可以从别名等自动完成...

2)我最近发现了一个有趣的项目: Clink - 将Bash功能强大的命令行编辑带到Microsoft Windows'cmd.exe

  • GNU的Readline库中强大的Bash类线编辑功能。阅读有关Readline键盘快捷键的更多信息。
  • 高级路径完成( TAB )。
  • 从剪贴板粘贴( Ctrl-V )。
  • 支持完成可执行文件/命令和环境变量。
  • 撤消/重做( Ctrl -_ Ctrl-X Ctrl-U
  • 改进了命令行历史记录。
    • 坚持参加会议。
    • 可搜索( Ctrl-R Ctrl-S )。
    • 历史扩展(例如!!,!和!$)。
  • 使用Lua完成脚本编写。

这似乎是一个年轻但正在萌芽的项目,所以我创建了一个在Console Emulator中使用它的选项。

答案 1 :(得分:5)

Windows“DOS框”中有一个历史缓冲区的最大大小 - 左上角图标,右键单击,选择属性,您将看到命令历史记录的缓冲区大小默认为50。

答案 2 :(得分:4)

在PowerShell中,您可以通过MaximumHistoryCount自动变量控制历史记录的最大大小(默认为64)

PS> $ MaximumHistoryCount

答案 3 :(得分:4)

检查滚动锁键。 DOH!我意外地撞到了我,所以向上和向下箭头只是滚动窗口。

答案 4 :(得分:3)

我多年来遇到过这个问题。主要是使用bash shell中的命令行使用python。经过一些实验,今天重新发生了第1000次(或多或少),我能够通过将shell的命令历史记录设置为缓冲区大小为999,缓冲区数为999(我选择了最大的)来解决问题。每个可能的设置,任何设置都可能比我之前的设置更有效,这是50/50)。要访问命令历史记录,请右键单击shell窗口左上角的“属性”,然后选择“选项”选项卡。我不确定这些设置对shell性能的影响,但到目前为止还没有其他任何东西受到影响,命令行历史记录再一次在我以前没有工作的shell中为我工作。我意识到这个答案是类似于steve-gilham的回答,但也许给出了更多的背景。

不可否认,我的答案涉及一项有效的实验。

答案 5 :(得分:1)

控制台中的所有历史记录均由Doskey提供。它也始终可用于所有基于字符的交互式程序(例如程序调试器或文件传输程序),并为它启动的每个程序维护命令历史记录缓冲区和宏。

在DOS时代,人们可以记住执行后清除历史记录的软件。我不确定它们是错误,预期的行为,还是两者的混合。但是在this link的末尾你可以看到一些Doskey错误。

我建议任何遇到此问题的人尝试使用Doskey命令选项,看看是否可以纠正它。

答案 6 :(得分:0)

我从来没有经历过这种情况,但我想知道是否按下ALT+F7根据DOSKEY /?清除命令历史记录的组合{{1}}可能是原因。

答案 7 :(得分:0)

如果“突然”所有历史记录都消失了,也许新的cmd-shell会启动? 测试:

C:\Users\Guest\>doskey /history
 …long history…
C:\Users\Guest\>cmd
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
C:\Users\Guest\>doskey /history
 …no history…
C:\Users\Guest\>exit
C:\Users\Guest\>doskey /history
 …old long history…

在这个例子中你会看到新的cmd-Start但是如果你试试这个:

doskey /history
  …history list…
cmd echo /k
doskey /history
  …no list !

你没看到

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

但是新的CMD-Shell已经启动。 所以“退出”可能有助于这种情况!

答案 8 :(得分:0)

当我在 Windows 10 上的 Rez 环境中时,这发生在我身上。

根据上面@user1769064 的回答,将缓冲区设置为 999 并使用新环境重新启动外壳,问题就消失了。可能有一个低于 999 的数字也可以使用,但还没有尝试过。

答案 9 :(得分:0)

  1. 右键单击 Windows 命令提示符左上角的 C:\ 图标。
  2. 选择属性
  3. 在选项选项卡中,找到命令历史设置
  4. 将缓冲区大小更改为 999
  5. 关闭终端并重新启动