将代码编写为带有语法高亮的字符串

时间:2014-10-26 11:32:42

标签: ruby emacs elisp syntax-highlighting text-editor

我正在尝试在文本编辑器上将ruby源代码编写为字符串(作为真正的Ruby代码的一部分),并使用Ruby代码的语法突出显示,但是希望Ruby语法突出显示以处理字符串内的代码。使用双引号或单引号,百分比表示法,heredoc都使文本编辑器识别出它是一个字符串,因此整个代码块以单一颜色着色为字符串。

<<_
class Foo
    def bar
        # blah blah
    end
end
_

有没有办法让编辑器上的Ruby语法高亮显示错过字符串的边框,以便其内容作为Ruby代码高亮显示?

<小时/>

修改

Stefan注意到Atom,Sublime Text和RubyMine的一个很棒的功能来做到这一点。但不幸的是,它似乎不适用于Emacs ruby​​模式。有人知道修改后的ruby-mode.el或emacs上的其他一些库来执行此操作吗?

修改

或者任何人都可以编写一个简单的elisp代码(如果难以实现其他语言的突出显示,那么当heredoc标识符为RUBY时,忽略heredoc的开始和结束)?

2 个答案:

答案 0 :(得分:8)

至少Atom,Sublime Text和RubyMine支持基于heredoc标识符的语法突出显示。 <<-RUBY呈现为Ruby,<<-SQL呈现为SQL等等。

以下是Atom的截图:

Atom Editor Screenshot

答案 1 :(得分:1)

我知道这个问题已经有两年了,但是迟到的答案总比没有答案好。

作为Dmitry hints at,确实可以在emacs mmm-mode中执行此操作。这是我的init-ruby-mode.el emacs配置的一部分:

(require 'mmm-mode) ; install from melpa

(eval-after-load 'mmm-mode
'(progn
 (mmm-add-classes
  '((ruby-heredoc-js
     :submode js2-mode
     :front "<<-?JS_?.*\r?\n"
     :back "[ \t]*JS_?.*"
     :face mmm-code-submode-face)))
 (mmm-add-mode-ext-class 'ruby-mode "\\.rb$" 'ruby-heredoc-js)))

(eval-after-load 'mmm-mode
 '(progn
  (mmm-add-classes
  '((ruby-heredoc-shell
     :submode shell-script-mode
     :front "<<-?SH_?.*\r?\n"
     :back "[ \t]*SH_?.*"
     :face mmm-code-submode-face)))
 (mmm-add-mode-ext-class 'ruby-mode "\\.rb$" 'ruby-heredoc-shell)))

我的emacs配置完全基于purcell/emacs.d包。所以我建议在那里寻找更多关于如何让emacs为你工作的好例子。我添加了一个部分来使嵌套的ruby代码工作,这是它的样子:

enter image description here

另外作为旁注,上面说的是require 'mmm-mode - 我的配置实际上是使用purcell函数require-package,但这不是便携式的。

我需要保存并恢复缓冲区才能让mmm-mode识别出一个新的heredoc字符串,但我很难使用这个功能,因此不值得为我解决。