假设您的终端窗口有 80 列宽,并且您运行的 python 脚本仅包含:
print("x" * 81 + "\b\by")
你会期望输出是一行x
除了最后一行,它应该是一个y
. 我的问题是我得到的输出是一行充满x
而第二行包含一个孤独的y
. 事实是,每当要将退格字符打印到标准输出时,它都会按预期工作,除非有换行并且它应该将光标放在上面一行:在这种情况下,它似乎被排除在标准输出缓冲区之外。
我可以按照上面的代码片段以多种方式重现此行为,例如echo -e "xx...x\b\by"
尝试使用 bash 和 sh,printf(...);
用于 C/C++,cout << ...;
用于 C++。cat
当包含退格字符的文件以及键入需要多个终端窗口行的 stdin 读取时,也会出现同样的问题。在后一种情况下,'\b'
我多次按下退格键来替换字符:当我超过窗口宽度和换行时,我无法通过重复按下退格键到达前几行,但是调用程序按预期处理了这些命中,例如在scanf("%s", s);
通话中,s
将包含 79x
和 1y
,按照上面的例子。这里有趣的是,如果我调整窗口大小,使新的光标位置不再位于窗口的第一列,那么我就可以退格回到新的第一列位置,然后继续这样做,直到只有一个留下终端线;然后事实证明有一个位置我无法进一步退格 - 但我无法弄清楚如何预测该位置。
最后,换行和退格键相遇的另一种情况是键入长命令并愿意退格键回到第一行。我这样做没有问题。
我使用的是 Ubuntu 18.04,并使用各种终端仿真器尝试了上述所有操作,即 gnome-terminal、xvt 和 tilda。任何提示将不胜感激。谢谢!