D 更改控制台输出的一部分或一部分

D 更改控制台输出的一部分或一部分,d,D,是否有方法更改已写入控制台的内容 例如,我想更改已从以下内容写入的行: _ Foo 。。。为此: + Foo 虽然理想情况下,这可以在Windows(powershell或命令行)和Linux(shell)上运行,但也可以接受只使用Linux的解决方案 我不熟悉标准输入和输出,如果这是一个基本问题,请原谅。如果光标仍在同一行上,您可以执行以下操作: write("_ Foo"); stdout.fllush;//To force the displaying of the text now.

是否有方法更改已写入控制台的内容

例如,我想更改已从以下内容写入的行:

_ Foo
。。。为此:

+ Foo
虽然理想情况下,这可以在Windows(powershell或命令行)和Linux(shell)上运行,但也可以接受只使用Linux的解决方案


我不熟悉标准输入和输出,如果这是一个基本问题,请原谅。

如果光标仍在同一行上,您可以执行以下操作:

write("_ Foo");
stdout.fllush;//To force the displaying of the text now.
writeln("\r+ Foo"); //Output will be replaced
但这是行不通的:

writeln("_ Foo"); //Equivalent to as `write("_ Foo\n");`
stdout.fllush;//To force the displaying of the text now
writeln("\r+ Foo"); //Output will not be replaced (it will be on new line).

您也可以执行此操作以逐个擦除字符:

write("_ Foo");
stdout.fllush;//To force the displaying of the text now
writeln("\b+ Foo"); //Output will be "_ Fo+ Foo"


我还没有找到删除前几行的方法(我认为这是故意的)。

光标是否仍在该行上?您可能可以输出“\r+Foo”,后跟stdout.flush以覆盖当前行。许多控制台窗口的行为类似于经典终端,因为适当的字符控制序列(通常涉及Esc字符)可以将光标移动到窗口中的任何点。VT100是一个非常常见的选择。如果windows上的windows命令是这种情况,我不知道。在windows上,这很简单,windows控制台api甚至可以让您在不移动光标的情况下覆盖缓冲区。但这比仅仅使用单行回车更复杂……别忘了可以
stdout.flush()而不是写一行。有些程序这样做是为了像旋转的东西一样显示。在注释中编写代码很难,但请检查以下内容:
import std.stdio;导入core.thread;void main()。如果你能删除以前的行,它可能会弄乱过去的日志。我认为,无论是谁选择了可用的命令,都故意不包括删除前几行的命令。你是专门指Windows命令窗口吗?@ArndtJonasson不,任何(我想)。