我正在使用R,我想写一些使用cat放到控制台上的文本。如果文本在当前行上使用退格符(\ b),则很容易。例如:
> cat("A cat says ruff\b\b\b\bmeow")
A cat says meow>
但是如果有换行符,我不知道如何回到上一行。使用具有退格字符的cat似乎不会撤消换行符。
> cat("A cat says ruff\n\b\b\b\b\bmeow")
A cat says ruff
meow>
或者,如果有包允许您分配控制台的一部分,只是修改那里的内容也适用于我。我从来没有直接在linux中使用ncurses,但我的理解是我希望有一些类似于ncurses提供的功能。谢谢你的时间!
编辑:我将补充说,我不一定只需要修改控制台的某个部分 - 如果唯一的解决方案是分配整个控制台,这对我正在尝试做的很好。
编辑2:提供了tty控制台的解决方案。我现在对如果可以在Windows中使用RGui执行此操作感兴趣。
答案 0 :(得分:5)
你根本做不到。在tty输出的特殊情况下,您可以使用如上所示的转义序列,但这仅仅是该特定(罕见)情况的副作用(就R而言,行为实际上是未定义的)。除了R中记录的预定义序列(基本上只是\b
和\r
)之外,常规R GUI都不支持编辑,这些序列不会超过最后一行。
我应该补充说,如果你想要的话,有很多软件包提供小部件(创建你自己的特殊输出窗口)。
答案 1 :(得分:4)
尝试cat("hello world\033[A")
或cat("hello world\033[nA")
,其中n是您想要上升的行数。这些是用于向上光标的vt100序列。
http://ascii-table.com/ansi-escape-sequences-vt-100.php
e.g。这是我的屏幕上发生的事情
> hello again> > > cat("hello world\033[3Ahello again") hello world
你是正确的认为像ncurses这样的东西会更好。它被设计成一个更高级别的termio,它被设计成比输出这样的控制序列更高的级别。不过,我不知道R是否有任何包裹。
也许您可以描述为什么要这样做?你可能没有考虑过完全不同的选择。