R命令历史:如何配置向上箭头以将“多行,大括号括起来的输入”视为一行?

Posted

技术标签:

【中文标题】R命令历史:如何配置向上箭头以将“多行,大括号括起来的输入”视为一行?【英文标题】:R command history: how to configure up-arrow to treat "multiline, brace-enclosed input" as one line? 【发布时间】:2013-04-20 00:35:09 【问题描述】:

这个问题是关于将 R 控制台配置为在导航命令历史记录时表现得像 bash shell。它与?history 有点相关。对于大括号括起来的多行,我想将R的命令历史导航配置为类似于bash。

目前,当在 Linux 下的 xterm 中运行 R 时,使用向上箭头导航命令历史记录会导致前一行被逐一调用,即使一组行已用大括号括起来。例如,当将多行函数从文本编辑器复制/粘贴到 R 控制台时,就会发生这种情况。 bash 并非如此。 以下是 bash 在这方面如何发挥作用的示例:

在 Linux 下 xterm 内的 bash shell 中,键入以下五行后...

a=1 

x=1
y=1

...第一次按下向上箭头将调用括号括起来的命令的单行重新表述,像这样...

 x=1; y=1; 

...第二次按下会召回这个...

a=1

似乎在 R 中,向上箭头一次向后导航一行,与封装无关。有没有办法配置 R 使其具有类似 bash 的命令历史导航功能?

【问题讨论】:

如果您是 Emacs 用户(或打算成为 Emacs 用户),这很有可能。值得一提的是,ESS(Emacs Speaks Statistics)正是您所要求的。是的,它非常很方便。 和 RStudio 一样,如果我理解正确的话。 (好的,在重新阅读您的问题时,ESS 实际上做了一些不同(并且更好)的事情,回顾整个粘贴的代码块,无论它是否包含在大括号中,或者由几个表达式,或其他。) @RicardoSaporta 您使用的是最新版本吗?我刚刚使用 RStudio Server (0.97.248) 进行了尝试,它的行为与 JoshO'Brien 所描述的一样:只需按一下上箭头,即可调用一次粘贴的所有内容。 另一种选择是找到一个支持“管道”到控制台的文本编辑器,这有几个。 【参考方案1】:

您可以使用rlwrap。我将它用于其他控制台程序,并且效果很好。您需要在 R 命令之前添加 rlwrap 二进制文件,然后可以通过多种方式恢复历史记录行,包括多行匹配。

【讨论】:

我尝试安装并运行rlwrap R 并没有发现任何不同。我应该做其他事情吗?? 在这里查看utopia.knoware.nl/~hlub/rlwrap/rlwrap.html --multi-line 选项。 @RobertKubrick 链接已死。这里有可能吗?更新的manpages.ubuntu.com/manpages/trusty/man1/rlwrap.1.html 知道rlwrap 的适当命令行是什么吗?阅读帮助后,这似乎是一个很大的挑战【参考方案2】:

Linux/Unix 的解决方法

类似于 Rstudio(感谢 Ari B. Friedman 评论),其中 R 控制台中的用户使用 ShiftEnter 绕过 RETURN ,您可以在不接受换行命令的情况下使用 Ctrl-VCtrl-J 启动换行符(在 R 终端中)。这样,多行命令将作为带有换行符而不是输入的单行命令被接受到历史记录中,您甚至有机会对其进行编辑。您甚至可以在您的 .inputrc 文件中管理此操作的自定义组合。

我认为直接重新配置 R 是不可能的。

Readline man page may help more.

【讨论】:

以上是关于R命令历史:如何配置向上箭头以将“多行,大括号括起来的输入”视为一行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mac上配置Octave以获取上一个命令

emacs中解释器中的命令历史记录

当您处于历史中间时,导航到历史上最早/最新的命令

如何在 Linux tclsh 中通过光标键获取命令历史记录

Linux常用快捷键

DOS快捷键