为什么Windows cmd.exe限制为80个字符?

我喜欢在unix上伸展我的terminal。 windows lame命令行的历史或原因是什么?

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

如果你是鼠标恐惧症,你也可以在cmd窗口中input:

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

没有限制。

  1. 运行cmd.exe
  2. 点击屏幕左上方的图标。
  3. select属性
  4. select布局选项卡。
  5. 将缓冲区和窗口宽度设置为任何你喜欢的。
  6. 点击OK
  7. select保存属性以备将来…
  8. 点击OK。

你可能想看看控制台 。 这是一个开放源代码的应用程序,可以让你在标签环境中运行多个shell。 您还可以设置炮弹的透明度。

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

但是,向后兼容的工作相当可怕。 我不认为微软对它的实现是相当彻底的,而且我相信微软是确保新版本在老版本上不起作用的海报小子。 在COMMAND.COM下很多不能正常工作,这大大破坏了它的有用性,更不用说你必须inputDOSONLY来使某些程序正常运行,再加上微软已经删除了有用的命令。 老实说,我无法想象微软在很大程度上拥有“向后兼容性”。

而且,我认为线长度在80列的标准的真正原因是因为大多数命令行程序等都是在用户被设置为80列提示的情况下操作的,这意味着增加宽度会导致格式错误或更糟糕的可能完全破坏程序。

正如jmucchiello所提到的,如果你喜欢,MODE可以很好地调整窗口大小。

 configuration系统设备。

串口: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 [device] [/ STATUS]

redirect打印:模式LPTn [:] = COMm [:]

select代码页:MODE CON [:] CP SELECT = yyy

代码页状态:MODE CON [:] CP [/ STATUS]

显示模式:MODE CON [:] [COLS = c] [LINES = n]

 Typematic rate:MODE CON [:] [RATE = r DELAY = d] 

如果您在CONFIG.NT上启用了DOSONLY,但是,当您打开COMMAND.COM时,它将从cmd.exeinheritance适当的DOS风格行分辨率,但不能从COMMAND.COM中调用MODE。 如果您希望在COMMAND.COM内resize,则必须使用16位汇编指令,如下所示:

80×50行分辨率 (没有帧缓冲,没有SVGA,几乎被普遍支持。)

  DEBUG
 A100
 MOV AX,1112
 INT 10
 INT 20

 G
 Q 

132×60行分辨率 (无帧caching,需要SVGA,不能在ATI gfx卡上工作,通常在nVidia gfx卡上工作,afaict总是在英特尔集成gfx卡上工作)。

  DEBUG
 A100
 MOV AX,4F02
 MOV BX,010C
 INT 10
 INT 20 

G
Q

如果你在COMMAND.COM上input这个值,它会给你指定的分辨率。 (警告:如果你的显示器不够古老而不支持这个模式,那么你可能会毁掉它。附注:如果你能运行Windows,你的显示器应该没问题。免责声明:强调应该,你已经被警告,所以这不是我的问题,如果你的显示器fries.–)然而,如果你使用这个没有DOSONLY启用,COMMAND.COM将调整回到它的以前的大小应用程序(在这种情况下,除非你写它到一个文件并执行,DEBUG)退出。

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

 新的FreeDOS模式由Eric Auer 2003-2005。 许可证:GPL。  (版本12may2005)
 MODE [设备] [/ STA [TUS]](显示一个或所有设备的状态)
 MODE LPTn [:] cols [,[lines] [,retry]](cols或cpi,6/8 lpi,重试p或n)
 MODE LPTn [:] [COLS = ...] [LINES = ...] [RETRY = ...](retry:p infinite / n none)
 MODE LPTn [:] = [COMn [:] | NUL](将打印机数据redirect到串口或NUL)
 MODE COMn [:]波特率,奇偶校验,数据,停止,重试(允许空值)
 MODE COMn [:] [BAUD [HARD] = ...] [PARITY = ...] [DATA = ...] [STOP = ...] [RETRY = ...]
  波特可以缩写为唯一的前缀,奇偶校验可以是o / e / n / s / m
  后2个平均空格/标记,数据可以是5..8,停止1..2。 重试是IGNORED!
  计划:重试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] =数字(需要显示)
 MODE CON [:] [CP | CODEPAGE] PREP [ARE] =((codepage)filename)(需要DISPLAY)
  使用PREP =((,cp2,cp3,,cp5)...)准备其他缓冲区中的代码页。
 MODE [40 | 80 | BW40 | BW80 | CO40 | CO80 | MONO] [,行](行可以是25,28,43或50)
  如果您只想更改字体,请使用8,14或16作为“行”值。
 MODE [CO40 | CO80 | ...],[R | L] [,T](换档CGA左/右,T为交互模式)
 MODE 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和batch file的快捷方式的分辨率(右键单击快捷方式 – >属性 – >布局)。 这只适用于CMD.EXE,但不是COMMAND.COM。

一个简单的命令来解决我一直使用的窗口大小:

 wmic 

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

我不知道背后的历史,但是PuTTy作者的这个愿望清单是一个有趣的post,它解释了与任何types的cmd.exereplace不同的技术障碍:

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

你没有提到你正在寻找一个替代品,但如果是这样的话,你也可以检查一些cmd.exe替代品,如控制台2或JP软件的Take Command等。我也有一些与PuTTy- Cyg,它允许你使用PuTTy作为一个cygwinshell。

虽然其他答案显示的宽度不受限制,但是我总是发现很奇怪,可以用鼠标拖动和调整高度 ,而不是宽度

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

正如其他人所指出的那样,它并不局限于80个字符,而是我们为什么默认为80个字符的猜测,就是它是在DOS显示器80个字符宽的时代剩下的。

也可以看看

您还可以使用不同的terminal应用程序,例如Console2 ,它允许您调整窗口的大小(其中包括透明度以及使用任何字体的能力等)。 这是一个伟大的应用程序,我已经切换到它,现在我只使用cmd.exe当我绝对必须。

因为MS在很多方面都把“向后兼容性”看得很重,在这种情况下,我怀疑这是一种错误的信念,即如果他们没有标准的宽阔的窗口,它会以某种方式使人们感到不安。

当然,这可能是它被编程为一个固定的80个字符的宽度,这是非常普遍的,而额外的属性设置有点破解。

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

你会发现你可以设置的最大宽度是有限的,但根据你的屏幕分辨率而有所不同。 如果您的分辨率设置为1024 x 768,则会发现在命令提示符宽度上只能达到128。 一千○二十四分之一百二十八= 0.125

你会发现这个比例是一致的。 我有一个RDP会话运行在2000×768(我的三个显示器中的两个),并获得250的最大宽度。

现在,这实际上比实际的显示器尺寸大一点,但是我有三台显示器都运行着个人台式机。 (所以本质上,3 1024×768分辨率),如果我想要做一些简单的事情,就像在两台或更多台显示器上伸展一个命令提示符一样,我不能。 (我想要做很长的path(diruse.exe /等)的时候…

-C

由于它会左右滚动以及上下滚动,所以我在系统上做的第一件事是将我的宽度定义为180并保存。 这通常是足够的,所以堆栈的痕迹不必大部分包裹,但不是太多,你是在大量的空间。

当你在它的时候,设置垂直大小(回滚缓冲区)为全部9。 你会很高兴你有一天做了。

因为改善Unix / GNU-like开发所需要的任何可用性和function都将削弱Windows作为微软合作伙伴的商业平台。 防止这种情况意味着其他大公司为开发者提供的产品,如改进的terminal,以及其他一般的第三方产品,如文字处理器,video播放器等,都不会与现有的Unix / GNU软件竞争。 没有这个,Windows就不会成为一个有利可图的平台,微软将失去桌面垄断。

这就是terminal糟糕的原因,没有POSIX API,MSVC中没有C99的支持,而且这个名单还在继续。 为了澄清,普通的Unix / GNU技术和开发是故意不支持的,所以大型商业软件公司不必与他们竞争。