我经常在启动我的 R 环境时运行长时间的 R 脚本。我希望能够在 Emacs / ESS 中加载/运行 R 脚本并继续在另一个缓冲区进行其他工作。
当我按下 C-g 或 C-c C-c 键时,进程被中断,我必须重新启动脚本。
什么是在 ESS / Emacs 中后台运行 R 进程的最佳方法?
编辑:感谢您的答案和评论,但它们都没有解决 Emacs 加载/运行大型脚本时会冻结,并且您无法更改缓冲区的事实。
我想我的问题更加普遍-是否可以在 Emacs 后台运行进程以让您继续工作?
我经常在启动我的 R 环境时运行长时间的 R 脚本。我希望能够在 Emacs / ESS 中加载/运行 R 脚本并继续在另一个缓冲区进行其他工作。
当我按下 C-g 或 C-c C-c 键时,进程被中断,我必须重新启动脚本。
什么是在 ESS / Emacs 中后台运行 R 进程的最佳方法?
编辑:感谢您的答案和评论,但它们都没有解决 Emacs 加载/运行大型脚本时会冻结,并且您无法更改缓冲区的事实。
我想我的问题更加普遍-是否可以在 Emacs 后台运行进程以让您继续工作?
ESS 将 R 作为异步进程运行。你不需要将任何内容置于后台。你可以运行几个小时的代码,而仍然可以在 ESS 中无中断地工作。
你的问题似乎是其他问题。当你执行脚本时,它会以“可视”的方式执行,即你执行的代码会被打印到终端上。这会导致 Emacs 崩溃。
将 ess-eval-visibly
设置为 nil,大量的代码将被立即发送到 R 中:
(setq ess-eval-visibly nil)
干杯。
在最近的 ESS 版本中有一个新的设置 ess-eval-visibly
- 'nowait。它将您的代码放在较低的缓冲区中,然后将其发送到子进程。这样,您可以在不等待子进程完成的情况下看到您的代码和所有输出。
long.running()
,使用 res <- long.running()
。 - Wilduckess-eval-visibly-p
已被弃用。应该使用 ess-eval-visibly
。请参阅:http://ess.r-project.org/Manual/ess.html。 - VinceM-x R
将启动一个R会话(默认缓冲区名称为*R*
)。如果再次按下M-x R
,将启动第二个R会话(缓冲区名称为*R:2*
)。
每个会话都有自己的R进程,因此您可以在其中一个中运行长时间的R脚本,并仍可独立使用另一个。
按下C-x C-b
将显示缓冲区列表,这将允许您在R会话之间切换。
或者,如果您放置了
(global-set-key "\C-cr" 'ess-request-a-process)
.emacs
初始化文件中,每次按下C-c r
时,您将被提示选择要切换到哪个R会话(缓冲区)。如果您只有一个会话,则会自动切换到那里。ess-request-a-process
C-c C-k 的绑定,但是由于某种特殊且完全不知道的原因,它默认为 "S",即使你将 R 设置为默认值。 - aL3xa