【问题标题】:Writing code as string with syntax highlighting使用语法高亮将代码编写为字符串
【发布时间】:2014-10-26 11:32:42
【问题描述】:

我正在尝试在文本编辑器上将 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 的开始和结束)?

【问题讨论】:

  • 在某些编辑器中使用RUBY(或HTMLSQL)作为heredoc标识符,即str = &lt;&lt;-RUBY
  • 您应该可以使用mmm-mode 进行设置,但这需要一些修改。

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


【解决方案1】:

至少 Atom、Sublime Text 和 RubyMine 支持基于 heredoc 标识符的语法高亮。 &lt;&lt;-RUBY 呈现为 Ruby,&lt;&lt;-SQL 呈现为 SQL 等等。

这是来自 Atom 的截图:

【讨论】:

  • 一个很棒的功能。部分相关文章:(1)(2)
【解决方案2】:

作为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 字符串,但我几乎不使用此功能,因此不值得为我解决。

【讨论】:

  • 太棒了。谢谢。
猜你喜欢
  • 2017-04-20
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多