10

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

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

4

5 回答 5

5

AFAIK,这不能用当前组织模式的实现来完成。

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

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

于 2011-12-05T17:45:30.793 回答
4

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

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

于 2011-12-05T23:24:21.290 回答
0

可能是新的多模模式https://github.com/vitoshka/polymode/blob/master/readme.md 可以提供帮助。我还没有尝试过,但似乎很有希望。

于 2014-07-08T22:52:12.303 回答
0

polymode 包中的 poly-org.el 旨在解决 org-mode 中的多模式编辑问题。我试过了,但由于没有在间接缓冲区中启用 jit-lock,它冻结了 Emacs。

于 2014-11-26T20:56:39.537 回答
0

一种解决方法是在需要时在模式之间手动切换,例如,将以下代码添加到 .emacs 并使用 F6。

;; Toggle between org & R modes.
(defun toggle-org-R-mode ()
  (interactive)
  "Toggle mode between org-R modes"
  (cond 
   ((string= major-mode "org-mode")
    (R-mode))
   ((string= major-mode "ess-mode")
    (org-mode))
   )
  )
(global-set-key [f6] 'toggle-org-R-mode)
于 2015-03-06T15:31:12.460 回答