Emacs mmm-mode没有突出显示没有换行符的ruby子模式(ERB)? Elisp的建议?

时间:2011-09-23 00:02:32

标签: ruby emacs elisp

我正试图在Emacs 22和23(两个不同的服务器)中使ERB模板“正常工作”。

我在网上发现了几个几乎完全使用这个代码段的例子。请注意,我不想要任何背景颜色,因为我在SSH终端上工作。

这正确地检测第一个区域的开始位置,因为当点移动时模式线会发生变化。但是有些东西是不对的,因为它没有突出显示我的ruby代码,除非我用至少两个空行清除它,并且它似乎也认为ruby代码的第一段下面的所有内容都是ruby代码,即使在结束标记之后也是如此

我只能假设模式不正确,我想了解语法,以便我自己可以更好地调试它。谁能告诉我这里所有的@符号是什么意思?

此外,有没有人真正让ERB模板在mmm模式下工作?

(require 'mmm-mode)
(require 'mmm-auto) 

(setq mmm-global-mode 'maybe)
(setq mmm-submode-decoration-level 0)

(mmm-add-group
 'fancy-html
 '((html-erb
    :submode ruby-mode
    :match-face (("<%#" . mmm-comment-submode-face)
                 ("<%=" . mmm-output-submode-face)
                 ("<%"  . mmm-code-submode-face))
    :front "<%[#=]?"
    :back "%>"
    :insert ((?% erb-code       nil @ "<%"  @ " " _ " " @ "%>" @)
             (?# erb-comment    nil @ "<%#" @ " " _ " " @ "%>" @)
             (?= erb-expression nil @ "<%=" @ " " _ " " @ "%>" @)))))

(add-to-list 'mmm-mode-ext-classes-alist '(html-mode nil fancy-html))

Ruby detected but not highlighted Ruby highlighted, but rest of buffer broken

3 个答案:

答案 0 :(得分:2)

我有a similar setup,这甚至可能是您尝试的基础。即使缺少新行也会执行font-lock-fontify-buffer会导致显示正确的突出显示,因此问题可能在于mmm模式。

mmm-mode设置的主要好处是我可以很容易地看到ERB区域;设置从来没有完全适合我的语法突出显示的嵌入式代码,虽然我已经updating mmm-mode for compatibility with recent emacsen,但如果您真的想要详细的子区域突出显示,那么您可能值得探索替代方案。

和你一样,我一直不愿诉诸nxhtml,因为它非常重,我相信它也有显示怪癖。

我还要指出haml-mode在语法高亮显示嵌入式代码块方面做得非常好(最初只是ruby代码,直到我提供了javascript和css支持),这是为什么有几个原因之一这些天我更喜欢haml到html + erb。

答案 1 :(得分:0)

首先,如果您有对该框的SSH访问权限,请使用tramp。

我对ERB没有深刻的MMM模式魔力。但是,我使用Rinari和nxhtml,这一切都正常。如果您需要帮助,可以询问有关rinari和nxhtml的问题。

答案 2 :(得分:0)

现在已经修好了。从git repoMELPA更新到最新的mmm模式。