【问题标题】:How can I create a new syntax language definition for Sublime Text 3?如何为 Sublime Text 3 创建新的语法语言定义?
【发布时间】:2016-02-29 19:29:32
【问题描述】:

我想为具有特定格式的日志文件设置新的语言定义。我一直在互联网上搜索一个真正有效的教程,但我还没有找到。我尝试创建sublime-syntax 文件、AAAPackageDev 文件(JSON 和 YAML),以及另一个我记不起名字的语法包——它们似乎都不起作用,其中一些被遗漏了重要的细节,比如在哪里保存文件,如何让语法定义作为一个选项出现(我怀疑这与保存位置有关),或者keyword.other.joelog 范围如何与keyword.other 主题颜色相关(你只是删除最后一位?最后一位是否必须与标题中设置的范围相匹配?)。非常令人沮丧。

在最简单的情况下,我想获取以下文件并突出显示它:

2015-11-25 14:35:11 [LOG] Blah Blah Blah
2015-11-25 14:35:11 [LOG] some log statement
2015-11-25 14:35:11 [LOG] some other log statement
2015-11-25 14:35:11 [DEBUG] some embedded filename: [[ /path/to/file ]]
2015-11-25 14:35:11 [INFO] .............. blah blah ..............
2015-11-25 14:35:11 [DEBUG] <<PASS>> Directory not found: [[ /some/dir/name ]]
2015-11-25 14:35:11 [ERROR] <<FAIL>> Directory found: [[ /some/other/dir/name ]]
2015-11-25 14:35:11 [WARNING] some strange condition occurred

最终我想要类似于以下的语法定义:

  • LOG 行应该是“普通”文本
  • DEBUG 行应完全视为 cmets
  • ERROR 行应被视为其他内容(例如变量)
  • INFO 行正常,除了单词 INFO 应突出显示为某事(例如关键字)
  • 类似于 ERROR 或 INFO 的警告
  • 嵌入格式为[[ some string ]] 的字符串突出显示为字符串,无论它所在的行类型如何
  • &lt;&lt;PASS&gt;&gt;&lt;&lt;FAIL&gt;&gt; 以不同颜色突出显示,无论它们所在的行类型如何

我很高兴在手动选择模式时让其中任何一项工作,如果我可以根据完整文件名选择模式(它将根据前缀而不是后缀选择),我会很高兴,例如 joelog-20151126-110719.log 键控 'joelog' 前缀和 'log' 后缀)。

这可能吗?我可以用 JSON、YAML、XML、Martian 来编写它——只要我知道规则,任何语言或样式定义都可以。

编辑:抱歉,我的意思是包含我尝试关注的页面:

对于sublime-syntx 文件,我不知道如何让它显示为一个选项。使用AAAPackageDev 文件,我可以显示我的新语法定义,但它从未突出显示任何内容,即使只是遵循教程(放弃我自己的所有愿望,只是试图以任何方式突出显示某些内容) )。

谢谢!

【问题讨论】:

标签: sublimetext3 syntax-highlighting


【解决方案1】:

我重新开始,但没有任何效果......直到我删除了所有文件和尝试,然后从头开始重新开始。这些文件中的某些内容可能会阻止读取其他定义?不知道,但现在它终于可以工作了。

我的成功在于PackageDev。这是我想出的(仍在进行中):

# [PackageDev] target_format: plist, ext: tmLanguage
---
name: JoeLog
scopeName: source.joelog
fileTypes: [joe]
uuid: 0fb395f8-9fb7-41c2-8b56-51f971de8505

patterns:
- match: ^\d+-\d+-\d+ \d+:\d+:\d+ \[DEBUG\] (<<PASS>>).*$
  name: comment.joelog
  captures:
    '1': {name: constant.other.symbol.joelog}
- match: ^\d+-\d+-\d+ \d+:\d+:\d+ \[DEBUG\] (<<FAIL>>).*$
  name: variable.joelog
- match: ^\d+-\d+-\d+ \d+:\d+:\d+ \[DEBUG\].*$
  name: comment.joelog
- match: ^\d+-\d+-\d+ \d+:\d+:\d+ \[ERROR\].*$
  name: variable.joelog
- match: ^\d+-\d+-\d+ \d+:\d+:\d+ \[LOG\].*$
  name: support.class.joelog
- match: ^\d+-\d+-\d+ \d+:\d+:\d+ \[INFO\].*$
  name: support.function.joelog
- match: ^\d+-\d+-\d+ \d+:\d+:\d+ \[WARNING\].*$
  name: keyword.other.joelog
- match: \[WARNING\]
  name: keyword.other.joelog
- match: ^\d+-\d+-\d+ \d+:\d+:\d+ \[FATAL\].*$
  name: invalid.illegal.joelog
- begin: ^\d+-\d+-\d+ \d+:\d+:\d+ \[STACK TRACE\].*$
  end: ^\s*$
  name: invalid.illegal.joelog
...

我仍然不知道我在做什么,但至少有些东西在起作用。我希望能够在 &lt;&lt;PASS&gt;&gt;&lt;&lt;FAIL&gt;&gt; 中着色,而不必复制 DEBUG 定义,因为这些字符串可能出现在其他行上,我不想复制所有这些,但我没有t 想出了如何做到这一点,但是(欢迎任何指针)。

选择范围是因为我选择的主题中使用了颜色,但这可能是个坏主意,我应该选择从上下文的角度来看有意义的范围。但我会把它留到另一天。 TmTheme Editor 在查看我的主题中定义了哪些范围以及实际范围名称是什么方面提供了很大帮助。

我使用ApplySyntax 包(可通过包控制获得)根据完整文件名选择这种新语法,而不仅仅是扩展名。

【讨论】:

    【解决方案2】:

    以下是我通过重新设计一些颜色主题并使用指向 TmThemeEditor 的有用链接来编译的常用范围列表:

    # Common generic scopes used in sublime-syntax / color-scheme
    comment
    comment.line
    constant
    constant.character
    constant.character.escape
    constant.language
    constant.numeric
    constant.other
    constant.other.symbol
    entity
    entity.name.class
    entity.name.filename
    entity.name.function
    entity.name.tag
    entity.name.type.class
    entity.other.attribute-name
    entity.other.inherited-class
    invalid
    invalid.deprecated
    keyword
    keyword.control
    keyword.control.import
    keyword.operator
    keyword.other
    punctuation
    punctuation.definition.string.begin
    punctuation.definition.string.end
    punctuation.definition.tag
    punctuation.definition.tag.begin
    punctuation.definition.tag.end
    punctuation.definition.variable
    storage
    storage.modifier
    storage.type
    storage.type.class
    storage.type.function
    string
    string.regexp
    support
    support.class
    support.constant
    support.function
    support.other.variable
    support.type
    variable
    variable.function
    variable.language
    variable.other
    variable.parameter
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多