ruby - 崇高文本heredoc标签的完整列表?
问题描述
我注意到sublime text 会自动识别某些 heredoc 标签并相应地突出显示语法。
这是一个简单的例子,第一个 heredoc 知道根据 SQL 突出显示语法,但第二个不知道,即使它的内容相同。因此可以推断 sublime '知道'第一个是 SQL,因为 heredoc 标记是SQL
)。
问题:可用的 heredoc 标签的完整列表是什么?
注意:这是在 ruby heredoc 中,但我想它也可能适用于其他语言,尽管我无法确认。
解决方案
这是正在使用的语法定义的函数(在您的情况下,是 Ruby 语法)。或者,如果您愿意,这不是在任何地方都可以使用的东西,一种语言必须专门支持它。
因此,此类 heredocs 的列表确实受限于已知列表,并且为了看到您需要查看相关语言的语法定义。
对于 Ruby(从 build 3211 开始),该列表是HTML
、SQL
、CSS
、JS
(或JAVASCRIPT
)和RUBY
。在 build 4092 中,语法还包括SH
(or SHELL
)。所有其他人(例如您的DOC
上述内容都是“普通的”)。
如果您想更深入地了解它的工作原理,可以使用View Package File
命令面板打开Ruby/Ruby.sublime-syntax
以查看与语言匹配的规则。如果您搜索heredoc
,您可以看到context
包含所有与此匹配的规则,通常如下所示(在构建 3211 中;在构建 4092 中更高级):
# heredoc with embedded SQL and indented terminator
- match: '(<<[-~]"?((?:[_\w]+_|)SQL)\b"?)'
scope: punctuation.definition.string.begin.ruby
push: [heredoc-sql, trailing-heredoc-start]
在这种情况下,规则说后面跟着 SQL 的 heredoc 说明符应该push
是一个名为 的上下文heredoc-sql
,它就在下面:
heredoc-sql:
- meta_scope: string.unquoted.embedded.sql.ruby
- meta_content_scope: text.sql.embedded.ruby
- match: ^\s*\2$
scope: punctuation.definition.string.end.ruby
pop: true
- include: scope:source.sql
- include: interpolated-ruby
- include: escaped-char
这里include: scope:source.sql
是说语言应该切换到 SQL 模式的魔法酱。它上面的规则pop
是导致它“退出”heredoc并返回Ruby的原因。
使用这个公式,可以进行语法修改以包含 Sublime 支持的其他语言。这在 Sublime Text “4” 版本中可能更容易实现,其中语法系统增强之一是扩展语法定义的能力。
推荐阅读
- julia - Methoderror:在 Julia 的 Dataframe 上使用 sort() 时没有方法匹配 isless
- javascript - 不和谐.js;为什么这不添加角色?
- html - 如何在表格溢出时添加水平滚动?
- vb.net - vb.net - 如果没有可读取的内容,StreamReader 将挂起
- vagrant - 宅基地不加载网页
- c# - 根据当前 CultureInfo ASP.NET Core 存储 DateTime
- powershell - 选择 x 数量的文件并将它们复制到另一个文件夹的批处理文件
- ios - 子视图关闭后父视图不刷新
- java - 需要从 List 中的每个文件中读取每 N 行
- vue.js - 创建一个新的 vue-moveable 实例