gpt4 book ai didi

sublimetext3 - 如何为 Sublime Text 3 创建新的语法语言定义?

转载 作者:行者123 更新时间:2023-12-04 04:54:59 26 4
gpt4 key购买 nike

我想为特定格式的日志文件设置新的语言定义。我一直在网上搜索一个真正有效的教程,但我还没有找到。我试过创建 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 行应完全视为注释
  • 错误行应该被视为其他东西(例如变量)
  • INFO 行正常,除了单词 INFO 应突出显示为某物(例如关键字)
  • 警告类似于 ERROR 或 INFO
  • 已嵌入 [[ some string ]] 格式的字符串突出显示为字符串,无论它位于
  • 上的行的类型如何
  • <<PASS>><<FAIL>>以不同的颜色突出显示,无论它们位于哪种类型的线上

  • 我很高兴在手动选择模式时让这些工作正常工作,尤其是如果我可以根据完整文件名选择模式(它将根据前缀选择,而不仅仅是后缀,例如 joelog -20151126-110719.log 去掉 'joelog' 前缀和 'log' 后缀)。

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

    编辑:抱歉,我的意思是包含我尝试关注的页面:
  • http://docs.sublimetext.info/en/latest/extensibility/syntaxdefs.html
  • http://www.sublimetext.com/docs/3/syntax.html
  • http://www.sublimetext.com/docs/3/packages.html
  • https://github.com/SublimeText/AAAPackageDev
  • https://github.com/SublimeText/AAAPackageDev/blob/master/Syntax%20Definitions/Sublime%20Text%20Syntax%20Def%20%28YAML%29.YAML-tmLanguage
  • https://packagecontrol.io/packages/SyntaxHighlightTools

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

    谢谢!

    最佳答案

    我重新开始,没有任何效果……直到我删除了所有文件和尝试,然后又从头开始。这些文件中的某些内容阻止了其他定义被读入,也许?没有线索,但现在终于可以工作了。

    我的成功来自 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
    ...

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

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

    我用了 ApplySyntax package(可通过 Package Control 获得)以根据完整文件名选择此新语法,而不仅仅是扩展名。

    关于sublimetext3 - 如何为 Sublime Text 3 创建新的语法语言定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943091/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com