【问题标题】:emacs: using mmm-mode to combine markdown-mode and ESS for editing rmarkdown filesemacs:使用 mmm-mode 结合 markdown-mode 和 ESS 来编辑 rmarkdown 文件
【发布时间】:2025-11-25 09:10:01
【问题描述】:

我正在使用 mmm-mode 来结合 markdown-mode 和 ESS 来编辑 Rmarkdown 文件。我在 Windows 7 上使用 gnu emacs 24.3 和上述模式的最新版本。这就是我的 .emacs 文件中的内容:

(require 'mmm-mode)   ;;; possibly init with (require 'mmm-auto) instead
(mmm-add-classes
 '((rmarkdown
    :submode r-mode
    :face mmm-declaration-submode-face
    :front "^```[{]r.*[}] *$"   
    :back "^``` *$")))
(setq mmm-global-mode 'maybe)
(mmm-add-mode-ext-class 'markdown-mode "\\.rmd\\'" 'rmarkdown)

只要在显示 rmarkdown 文件的缓冲区内工作,就可以识别 R 代码块,并且我在 R 代码块和 markdown 块中都获得了正确的语法感知字体锁定。更多,当我在 R 代码块中有要点时,我得到 ESS 和 Imenu-R 菜单,当它在降价区域中时,我得到一个降价菜单。到目前为止一切顺利。

这是我的问题。在 R 代码块内,电动左分配不起作用。我不能简单地按下划线键来获取“

另外,我没有得到 R 代码的语法感知自动缩进。

当我使用 ESS 编辑包含纯 R 代码的文件时,这两件事都有效。

关于如何调整它的任何想法?我知道近一年前的这篇文章:How can I use Emacs ESS mode with R markdown? 和指向 polymode 的指针,但 polymode 似乎进展缓慢。我还看到了其他指向 org-mode 以实现类似功能的指针,虽然我可能会在某些时候尝试一下,但今天我的问题是关于充分利用 mmm-mode、markdown-mode 和 ESS 的组合。感谢您的帮助。

【问题讨论】:

  • 我认为酷孩子们使用由 ESS 贡献者之一编写的“polymode”;我记得它在 Google Code 上。

标签: r emacs markdown ess r-markdown


【解决方案1】:

Polymode 是要走的路。不幸的是仍在开发中,但适用于大多数事情。

【讨论】:

  • 为什么? mmm 模式有效。 Emacs 维护者在 emacs-devel 上多次谴责间接缓冲区。
  • 虽然,如果你真的设法让 Dave Love 的方法在当前的 Emacs 中工作,并支持基本功能(至少字体锁定和缩进),我很乐意看到这一点。
  • @Dmitry 字体锁定和缩进工作得相当好。鉴于所有代码都是通用的,并且没有特定于模式的调整,我认为间接缓冲区是目前要走的路。
  • 您是如何在没有特定模式调整的情况下使缩进工作的?你支持像 ERB/JSP/PHP 这样的东西吗?
  • @Dmitry,通过包装 indent-line-function 和 indent-region-function。我不使用 ERB/JSP/PHP,但如果你有现实生活中的例子,我很乐意补充。