如何在 Windows 终端中更改命令历史记录缓冲区大小

如何在 Windows 终端中更改命令历史记录缓冲区大小

我可以使用首选项更改 CMD.exe 的历史缓冲区大小:

CMD 属性

但是在 Windows 终端内运行 CMD shell 时该怎么做?这些设置无处可寻。

编辑

该问题与 WT“历史大小”设置无关,其记录如下:

历史大小
这将设置您可以滚动回的窗口中显示的行数。

这相当于 CMD“屏幕缓冲区大小”:

布局属性

我问的是输入的缓冲区命令您可以使用向上和向下箭头或使用 F7 循环浏览,如下所示:

在此处输入图片描述

(如果您在 WT 内部运行的 CMD 窗口中尝试此操作,它不会显示超过 50)

答案1

首先,让我们了解一些术语:

这相当于 CMD“屏幕缓冲区大小”

虽然大多数人认为此对话框是 CMD 的一部分,但它实际上是“Windows 控制台主机”(conhost.exe或“ConHost”),这是 Windows 终端旨在取代的 Windows 传统(20 多年)终端应用程序。

您还可以看到在 Windows 控制台主机中运行的任何其他基于终端的应用程序(例如 PowerShell 或 WSL)中引用的“命令历史记录”选项。但是,只有在托管 CMD shell 时,该设置才会真正控制命令历史记录长度。

那就是,引用一位 Windows 终端开发人员的话(还负责维护 ConHost):

我们不想再犯这样的建筑错误。

这是坏消息。好消息是,你应该能够使用其他功能复制此功能。正如另一位 Microsoft 团队成员在同一 Github 帖子中所说:

记住命令行客户端执行的命令不是终端的责任。这是

而且,作为 shell,CMD 本身确实具有此功能doskey.exe。例如:

doskey /listsize=999

这会将命令历史记录大小设置为 999,覆盖 ConHost 中设置的任何内容,以及您在 Windows 终端中看到的默认大小 50。

您可以通过以下方式为 Windows 终端中的所有 CMD 会话更改此设置:

  1. winterm_start.cmd在您的 Profile 目录(或您想要放置它的任何位置)中创建一个文件(C:\Users\<username>或任何您想要调用的文件),并使用以下命令:

    @echo off
    doskey /listsize=999
    
  2. 打开 Windows 终端设置

  3. 选择“命令提示符”配置文件。

  4. 在下面一般的选项卡(第一个),更改命令行

    从:

    %SystemRoot%\System32\cmd.exe
    

    到:

    %SystemRoot%\System32\cmd.exe /k %UserProfile%\winterm_start.cmd
    

    (当然,如果您更改了文件名/位置,则需要进行调整)

您打开的任何新的命令提示符配置文件现在都应该具有扩展的命令历史记录(包括F7支持)。

我通过粘贴 100 行内容来测试这一点:

echo 1
echo 2
...

...进入 Windows 终端的命令提示符没有这次更改后,它只能记住最近的 50 条命令。这次更改后,它记住了所有命令(当然,还会记住更多)。

相关内容