可以写在前一行吗?

时间:2011-12-23 18:44:04

标签: r

我正在使用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执行此操作感兴趣。

2 个答案:

答案 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是否有任何包裹。

也许您可以描述为什么要这样做?你可能没有考虑过完全不同的选择。