Emacs,R,Org-mode:如何在R代码块中自动切换到ESS模式?

Pra*_*ani 9 emacs r noweb org-mode ess

R.Rnw文档中使用代码块时,emacs缓冲区会自动检测到光标位于代码块内(即内部<<>>@),并切换到ESS模式 - 这非常有价值,因为可以在内部进行基于ESS的代码格式化代码块,更有用的是,可以将代码行/区域发送到下级*R*进程缓冲区.

如何在R代码块中的组织模式文件中(即#+begin_src R和之间#+end_src)获得相同的功能- 我希望emacs能够在R代码块中自动识别它,并打开ESS模式以便我可以发送片段代码的*R*过程.我知道我可以做Ctl-C '并切换到不同的ESS模式缓冲区,在那里我可以编辑代码并获得所有其他ESS模式的便利(包括发送代码R).不过,我想没有要做到这一点,即我希望能够从R代码块发送代码片段在同一组织模式缓冲区.

cm2*_*cm2 5

AFAIK,这不能用 Org-mode 的当前实现来完成。

我不确定这在 Org-mode 中是否可行,而无需深入研究 elisp 代码。C-c 'Org 模式中该命令的要点是,您有一个额外的缓冲区,其中包含您想要/需要的特定语言的所有语法突出显示。

可能有一种方法可以R通过编写一些 Org 模式挂钩来解决- 特定代码的问题,该挂钩首先检查您是否在#+begin_src R...#+end_src R块中,然后检查代码块。我怀疑这会很混乱,并且会与其他 Org 模式功能发生冲突。此外,您必须编写另一个函数来获取当前代码块并将其传递给 Org-mode 的R解释器,以及您添加到代码块中的所有选项src


Ber*_*iss 4

大约一年前,我在 org-mode-list 上问了同样的问题。@cm2 已经提到,不可能在 org-mode 中使用 ESS 功能;据我所知,Emacs 无法处理两种主要模式,即使使用 mmm 模式似乎也存在一些困难。

Dan Davison 好心发布了一些模仿 ESS 功能的 elisp 代码。因此,您可能想查看丹对我的问题的答复。