Windows 的控制台是可以在“属性”界面里设置终端窗口的行数、列数以及显示缓冲的。
Windows Terminal 因为接管了窗口状态,所以隐藏了控制台的“属性”界面。但控制台里运行的程序调用相关 API 一样可以完成这些设置,比如系统自带的 mode 命令。Windows Terminal 显然没考虑这个问题。
如果控制台程序设置了比当前窗口大或者小的终端窗口行数,终端显示就会不正常。比如执行 mode 命令设置一个较大的 LINES,cls 后命令提示符就会消失,要敲一下回车才会显示。而如果一个较小的 LINES,cls 命令就只会清除上半部分屏幕。
如果要解决这个问题,就需要控制台子系统检测自身是否在 Windows Terminal 里,以区分对待;或者 Windows Terminal 根据终端窗口当前状态实时调整自己的大小。前者不太可能,要让 OS 团队去迁就一个 UWP 团队,简直白日做梦。而后者对 Windows Terminal 这种多分页工具来说也是不可接受的。
所以我估计这个问题不会得到解决。