【问题标题】:Why is the Windows cmd.exe limited to 80 characters wide?为什么 Windows cmd.exe 限制为 80 个字符宽?
【发布时间】:2020-01-12 02:01:48
【问题描述】:

我喜欢在 unix 上扩展我的终端。 windows lame命令行背后的历史或原因是什么?

【问题讨论】:

  • 这是一种选择,就像很多其他的东西都是选择一样。如果你有一个固定的尺寸,那么设计“你的屏幕”会更容易,因为你完全知道限制。缺点很明显,无论选择什么尺寸,对某人或某物来说总是错误的。当前的 Windows CMD 屏幕实际上是当时唯一的屏幕。可用的分辨率并不多,而且高分辨率的也很少。

标签: cmd


【解决方案1】:

不是。您可以右键单击标题栏,选择属性,然后在“布局”选项卡中更改屏幕缓冲区大小(线宽和回滚)和窗口大小(视口大小)。如果您从快捷方式启动 cmd,则可以保存这些设置以备将来使用。

【讨论】:

  • 不要忘记字体/颜色。当我打开命令提示符时,没有什么比回到一些复古的绿屏更好的了。 8^D
  • 您的意思是“除了将字体更改为 consolas”hanselman.com/blog/UsingConsolasAsTheWindowsConsoleFont.aspx
  • 我总是跳进去,将宽度设置为 180,将回滚设置为 9999。这并不是你经常需要它,但我从来没有受到任何伤害(即使在 128mb 机器的日子里)并且一旦你需要它,你会很高兴你事先设置它。宽度是个人喜好,我不喜欢从我的编译器看到换行,除非在极端条件下,但其他人不喜欢滚动。
  • 增加屏幕缓冲区高度被低估了。为了将程序的输出完全读取到屏幕上,这种滚动通常是必需的(除非您使用 MORE)。
  • 嗯,是的……但不是。您不能通过拖动窗口边缘来任意调整窗口大小,我们在 2012 年,它仍然没有改变。
【解决方案2】:

如果你害怕鼠标,你也可以在 cmd 窗口中输入这个:

mode <cols>,<lines>
mode 80,25
mode 120,50
etc.

【讨论】:

  • 这对于处理应用程序上对“cmd /c ...”的系统调用非常有帮助,该应用程序检查窗口大小以格式化其输出。刚刚在通话前扔了一个“mode 200,50 &&”,生活还不错
  • 你失去了垂直滚动,至少在 Win7 上
【解决方案3】:

没有限制。

  1. 运行 cmd.exe
  2. 点击屏幕左上角的图标。
  3. 选择属性
  4. 选择布局选项卡。
  5. 将缓冲区和窗口宽度设置为您喜欢的任何值。
  6. 点击确定
  7. 选择保存属性以备将来使用...
  8. 点击确定。

您可能想查看Console。它是一个开源应用程序,可让您在选项卡式环境中运行多个 shell。您还可以设置外壳的 alpha 透明度。

【讨论】:

    【解决方案4】:

    RE:因为 MS 在很多事情上都重视“向后兼容性”,在这种情况下,我怀疑如果人们没有标准的 80 宽窗口,它会以某种方式让人们感到不安,这是一种错误的信念。

    不过,向后兼容性非常糟糕。我不认为微软对他们的实施非常彻底,我相信微软是确保新版本不能在旧版本上运行的海报男孩。在 COMMAND.COM 下很多东西都不能正常工作,这大大破坏了它的实用性,更不用说你必须输入 DOSONLY 才能使某些程序正常运行,而且微软一直在删除有用的命令。老实说,我无法想象微软非常重视“向后兼容性”。

    此外,我认为行长标准为 80 列的真正原因是因为大多数命令行程序等在假设用户被限制在 80 列提示符下运行,这意味着增加宽度可能会导致格式错误或更糟的是可能会完全破坏程序。

    正如 jmucchiello 所提到的,如果您愿意,MODE 可以很好地调整窗口大小。

    配置系统设备。
    
    串口:MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
                                    [to=on|off] [xon=on|off] [odsr=on|off]
                                    [octs=on|off] [dtr=on|off|hs]
                                    [rts=on|off|hs|tg] [idsr=on|off]
    
    设备状态:MODE [设备] [/STATUS]
    
    重定向打印:MODE LPTn[:]=COMm[:]
    
    选择代码页:MODE CON[:] CP SELECT=yyy
    
    代码页状态:MODE CON[:] CP [/STATUS]
    
    显示模式:MODE CON[:] [COLS=c] [LINES=n]
    
    打字速度:MODE CON[:] [RATE=r DELAY=d]

    如果您在 CONFIG.NT 上启用了 DOSONLY,但是,当您打开 COMMAND.COM 时,它将从 cmd.exe 继承正确的 DOS 样式的行分辨率,但您不能从 COMMAND.COM 内部调用 MODE。如果您希望在 COMMAND.COM 中调整大小,则必须使用 16 位汇编指令,如下所示:

    80x50 线分辨率(无帧缓冲,无 SVGA,几乎普遍支持。)

    调试
    A100
    MOV AX,1112
    智力 10
    智力 20
    
    G
    问

    132x60 线分辨率(无帧缓冲,需要 SVGA。不适用于 ATI gfx 卡,通常适用于 nVidia gfx 卡,但始终适用于 Intel 集成 gfx 卡。)

    调试
    A100
    MOV AX,4F02
    MOV BX,010C
    智力 10
    智力 20
    
    

    G 问

    如果您在 COMMAND.COM 上输入此内容,它将为您提供指定的分辨率。 (警告:如果您的显示器足够古老,不支持该模式,您可能会毁掉它。旁注:如果您可以运行 Windows,您的显示器应该没问题。免责声明:强调应该,并且您已被警告,所以如果您的显示器出现故障,这不是我的问题。;-) 但是,如果您在未启用 DOSONLY 的情况下使用它,COMMAND.COM 将在应用程序后立即调整回原来的大小(在这种情况下,除非您将其写入文件并执行,DEBUG) 退出。

    或者,您可以使用 FreeDOS 的 MODE.COM,它将在 COMMAND.COM 设置为 DOSONLY 下正常运行。您可以从官方网站(freedos.org)的磁盘映像中提取它,也可以通过http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/mode/2005/ 获取它。

    Eric Auer 2003-2005 的新 FreeDOS 模式。许可证:GPL。 (2005 年 5 月 12 日版本)
    MODE [device] [/STA[TUS]](显示一个或所有设备的状态)
    MODE LPTn[:] cols[,[lines][,retry]] (cols or cpi, 6/8 lpi, retry p or n)
    MODE LPTn[:] [COLS=...] [LINES=...] [RETRY=...] (重试:p 无限/n 无)
    MODE LPTn[:]=[COMn[:]|NUL](将打印机数据重定向到串口或NUL)
    MODE COMn[:] 波特、奇偶校验、数据、停止、重试(允许为空值)
    MODE COMn[:] [BAUD[HARD]=...] [PARITY=...] [DATA=...] [STOP=...] [RETRY=...]
      波特可以缩写为唯一前缀,奇偶校验可以是o/e/n/s/m,
      后 2 平均空间/标记,数据可以是 5..8,停止 1..2。重试被忽略!
      计划:重试 b/e/r -> 忙/错误/如果忙则准备好,p/n 无限/不重试。
    MODE CON[:] [CP|CODEPAGE] [/STA[TUS]](必须加载 FreeDOS DISPLAY)
    MODE CON[:] [CP|CODEPAGE] REF[RESH](需要显示)
    MODE CON[:] [CP|CODEPAGE] SEL[ECT]=number(需要显示)
    MODE CON[:] [CP|CODEPAGE] PREP[ARE]=((codepage) 文件名) (需要显示)
      使用 PREP=((,cp2,cp3,,cp5) ...) 在其他缓冲区中准备代码页。
    MODE [40|80|BW40|BW80|CO40|CO80|MONO][,rows](行可以是 25、28、43 或 50)
      如果您只想更改字体,请使用 8、14 或 16 作为“行”值。
    MODE [CO40|CO80|...],[R|L][,T](CGA左/右移位,T为交互模式)
    模式 CON[:] [NUMLOCK|CAPSLOCK|SCROLLLOCK|SWITCHAR]=值
      值可以是:+ 或 - 用于锁或用于 switchar 的字符。
    MODE CON[:] [COLS=...] [LINES=...](可能的值取决于您的硬件)
    MODE CON[:] [RATE=...] [DELAY=...](默认速率 20,默认延迟 1)
      速率可以是 1..32 表示 2..30 字符/秒,延迟可以是 1..4 表示 1/4..4/4 秒。

    出于与我提供的 ASM 代码相同的原因,除非您在 COMMAND.COM 中执行它并将 DOSONLY 添加到您的 CONFIG.NT 文件中,否则一旦 MODE.COM 退出,窗口将立即恢复到之前的大小。

    最后,正如其他人所说,也可以通过右键单击命令提示符的标题栏并修改属性 -> 布局来修改这些设置。同样,您可以为 CMD.EXE 和批处理文件的任何快捷方式设置分辨率(右键单击快捷方式 -> 属性 -> 布局)。这仅适用于 CMD.EXE,但不适用于 COMMAND.COM。

    【讨论】:

      【解决方案5】:

      一个固定我一直使用的窗口大小的简单命令:

      wmic
      

      它将打开 Windows Management Instrumentation 命令行并删除大小限制。 然后用 Ctrl+C 关闭它。

      【讨论】:

      • 作为警告,我不认为这可以轻易扭转。
      • 我发现了如何扭转它。删除注册表中 HKCU\Console 下 cmd.exe 的键。
      【解决方案6】:

      我不知道它背后的历史,但 PuTTy 的作者的这个愿望清单项目是一篇有趣的帖子,它解释了任何类型的 cmd.exe 替代品所涉及的技术障碍:

      http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/win-command-prompt.html

      您没有提到您正在寻找替代品,但如果是这样,您还可以查看一些 cmd.exe 替代品,例如 Console 2 或 JP Software 的 Take Command 等。我也有一些不错的使用 PuTTy-Cyg 的经验可以让您将 PuTTy 用作 cygwin shell。

      【讨论】:

        【解决方案7】:

        虽然宽度不受其他答案所示的限制,但我一直觉得奇怪的是,可以用鼠标拖动和调整 height 而不是 width.

        我认为默认的 80 个字符宽度与假设终端不会超过 80 个字符宽的旧程序的兼容性有关。不过,我不认为这是十年左右的现实原因。

        【讨论】:

        • 宽度和高度都可以调整大小,只是碰巧默认窗口宽度等于缓冲区宽度。您不能使窗口大于缓冲区,因此唯一的选择(使用默认的 80 列设置)是减小宽度。
        【解决方案8】:

        正如其他人所指出的,它不限于 80 个字符宽,但我猜测它为什么默认为 80 个字符是因为 CRT 显示器是 80 个字符宽的 DOS 时代遗留下来的。

        See also

        【讨论】:

        • 现代显示器在文本模式下可以宽于 80 个字符吗?
        • 您可能必须在帧缓冲模式下运行才能完成这项工作(但我可能错了,已经有一段时间了。)
        • 有一些 SVGA 模式的宽度为 132 个字符,不使用帧缓冲模式,但它们的支持非常随意。我的回答中列出了其中一种模式。
        • 它可以追溯到更远的地方:IBM 制造 80 列宽的 CRT 显示器的原因是它的穿孔卡片是 80 列宽。
        【解决方案9】:

        您还可以使用不同的终端应用程序,例如Console2,它允许您随意调整窗口大小(除其他事项外,例如透明度,以及使用您喜欢的任何字体的能力)。这是一个很棒的应用程序,我已经切换到它,现在我只在绝对需要时使用cmd.exe

        【讨论】:

          【解决方案10】:

          因为它会从左到右以及上下滚动,所以我在系统上做的第一件事就是将我的宽度定义为 180 并保存它。这通常就足够了,因此堆栈跟踪不必在大多数情况下进行包装,但也不必太多,以至于您会占用大量空间。

          当您使用它时,将垂直大小(回滚缓冲区)设置为全 9。你会很高兴有一天你做到了。

          【讨论】:

            【解决方案11】:

            因为 MS 在很多事情上都重视“向后兼容性”,在这种情况下,我怀疑如果人们没有标准的 80 宽窗口,它会以某种方式让人们感到不安,这是一种错误的看法。

            当然,它可能是被编程为固定的 80 个字符宽度,而这几乎是通用的,而且附加的属性设置有点小题大做。

            【讨论】:

              【解决方案12】:

              它是有限的。一探究竟。 (我的意思是窗口大小不是缓冲区)

              您会发现您可以设置的最大宽度是有限的,但会根据您的屏幕分辨率而有所不同。如果您的分辨率设置为 1024 x 768,您会发现在命令提示符宽度上只能达到 128。 128/1024=.125

              您会发现该比率全面一致。我有一个以 2000x768 运行的 RDP 会话(在我的三台显示器中的两台上),最大宽度为 250。

              现在,事实证明它比您的实际显示器尺寸大一点,但我有三台显示器都运行单独的桌面。 (所以本质上是 3 个 1024x768 分辨率),如果我想做一些简单的事情,比如在 2 个或更多显示器上拉伸命令提示符,我不能。 (我想在用很长的路径(diruse.exe/etc.)做事情时...

              -c

              【讨论】:

              • 如果您缩小字体大小,您可以获得(相对)更大的窗口大小。我刚刚在 1600x1200 的屏幕上获得了 300 多宽。
              • 您仍然可以扩大线宽并滚动窗口。自 VGA 时代以来,我的宽度为 160 或 180。
              【解决方案13】:
              【解决方案14】:

              因为提高类 Unix/GNU 开发所需的任何东西的可用性和功能性将破坏 Windows 作为 Microsoft 合作伙伴的商业平台。防止这种情况意味着其他大公司的开发人员产品,例如改进的终端,以及其他一般的第三方产品,例如文字处理器、视频播放器等,不会与现有的 Unix/GNU 软件竞争。没有这个,Windows 就不会成为一个有利可图的平台,微软也将失去其桌面垄断地位。

              这就是终端糟糕的原因,没有 POSIX API,MSVC 中没有 C99 支持,而且名单还在继续。需要澄清的是,故意不支持常见的 Unix/GNU 技术和开发,以便大型商业软件公司不必与它们竞争。

              【讨论】:

                猜你喜欢
                • 2012-07-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-08-03
                • 1970-01-01
                • 2014-05-11
                • 1970-01-01
                相关资源
                最近更新 更多