【问题标题】:buggy ANSI escape sequences in R promptR 提示符中的错误 ANSI 转义序列
【发布时间】:2017-06-23 15:34:37
【问题描述】:

当 R 在支持颜色的终端中以交互方式运行时,可以使用 ANSI 转义序列来将颜色放入提示符中,例如

options(prompt = "\033[0;31mThis is red\033[0m> ")

不幸的是,出现了问题,因为对于长命令行,行继续会覆盖提示而不是写入下一行。 当使用多种颜色时问题会变得更糟,因为不知何故,每个转义序列在命令行中“占用了一些空间”,直到提示符的结尾可能会覆盖开头。在我的配置中,例如

options(prompt = paste("\033[0;31m With \033[0;32m multiple",
                   "\033[0;33m colors \033[0;34m this",
                   "\033[0;35m gets \033[0;36m really",
                   "\033[0;37m wrong! \033[0m"))

为什么会这样?有解决办法吗?

PS:这个相当老的帖子似乎相关http://r.789695.n4.nabble.com/Xterm-escape-sequences-in-Prompt-td906375.html

更新: 使用 R 版本 3.6.0 和 readline 8.0(不知道这里有什么问题),上面描述的大部分问题都消失了,但仍然存在一些奇怪的行为。下面接受的答案可以解决所有问题。

【问题讨论】:

  • 需要明确的是,这是您的输入导致换行,而不是当您中断长行并获得继续提示时,通常是“+”是吗?屏幕截图可能会有所帮助(这里鼓励使用屏幕截图,这与 R-help 不同!)
  • @Spacedman 没错,这是我输入长行的时候。我添加了一些截图。

标签: r command-prompt ansi-escape


【解决方案1】:

您需要用特殊的“标记”围绕每个“不可见”颜色代码:\001\002

options(prompt = "\001\033[0;31m\002This is red\001\033[0m\002> ")

解释见$ info readline(或this short answer)。

【讨论】:

  • 感谢您花时间回答那个老问题(目前使用 R 版本 3.6.0 和 readline 8.0,不知道哪个重要,上述大部分问题已经消失,但您的解决方案确实是路要走)。
【解决方案2】:

r-devel 邮件列表中的 Gábor Csárdi 说我无法轻易改变这种行为 (http://r.789695.n4.nabble.com/buggy-ANSI-escape-sequences-in-R-prompt-td4728671.html)。他提出的解决方法是使用两行提示符,这很适合我。

【讨论】:

    猜你喜欢
    • 2015-08-14
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2011-06-18
    • 2011-09-27
    • 1970-01-01
    • 2021-06-28
    • 2012-04-18
    相关资源
    最近更新 更多