在R
文档中使用.Rnw
代码块时,emacs缓冲区会自动检测到光标位于代码块内(即<<>>
和@
内),并切换到ESS模式 - 这非常有价值,因为可以在代码块中获得基于ESS的代码格式化,更有用的是,可以将代码行/区域发送到次级*R*
进程 - 缓冲液中。
如何在R
代码块(即#+begin_src R
和#+end_src
之间的组织模式文件中获得相同的功能) - 我希望emacs能够自动识别它在R代码块中,打开ESS模式,这样我就可以向*R*
进程发送代码片段。我知道我可以Ctl-C '
并切换到不同的ESS模式缓冲区,我可以编辑代码并获得所有其他ESS模式的便利(包括将代码发送到R
)。但是我想不必须这样做,即我希望能够在相同的组织模式缓冲区中从R代码块发送代码片段。
答案 0 :(得分:4)
AFAIK,当前的Org-mode实现无法做到这一点。
如果没有深入研究elisp代码,我不确定这在Org-mode中是否可行。 Org-mode中C-c '
命令的要点是,您有一个额外的缓冲区,其中包含您希望/需要的特定语言的所有语法突出显示。
通过编写一些Org-mode挂钩,首先检查你是否在R
... {{1}阻止,然后检查代码块。我怀疑这将是混乱的,并与其他组织模式功能冲突。此外,您还必须编写另一个函数来获取当前代码块并将其传递给Org-mode的#+begin_src R
解释器,以及您添加到#+end_src R
块的所有选项。
答案 1 :(得分:4)
一年前左右,我在org-mode-list上询问了same question。 @ cm2已经提到过,在org-mode中无法使用ESS功能;据我所知,Emacs无法处理两种主要模式,即使使用mmm模式也似乎存在一些困难。
丹·戴维森(Dan Davison)亲切地发布了一些模仿ESS特征的elisp代码。所以,您可能想查看Dan对我的问题的回复。答案 2 :(得分:0)
可能是新的多态模式https://github.com/vitoshka/polymode/blob/master/readme.md 有帮助。我还没有尝试过,但看起来很有希望。
答案 3 :(得分:0)
multiode包中的poly-org.el旨在解决org-mode中的多模式编辑问题。我试过了,但由于没有在间接缓冲区中启用jit-lock,它冻结了Emacs。
答案 4 :(得分: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)