我正在尝试在文本编辑器上将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的开始和结束)?
答案 0 :(得分:8)
答案 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代码工作,这是它的样子:
另外作为旁注,上面说的是require 'mmm-mode
- 我的配置实际上是使用purcell函数require-package
,但这不是便携式的。
我需要保存并恢复缓冲区才能让mmm-mode识别出一个新的heredoc字符串,但我很难使用这个功能,因此不值得为我解决。