【问题标题】:Sublime Syntax Match First Line of the FileSublime 语法匹配文件的第一行
【发布时间】:2016-06-23 01:05:02
【问题描述】:

假设文件没有前导数字,我正在尝试将文件的第一行与 sublime 3 语法突出显示相匹配。

    <dict>
        <key>comment</key>
        <string>Matchs the first line comment</string>
        <key>match</key>
        <string>\A^[^0-9].*</string>
        <key>name</key>
        <string>comment</string>
    </dict>

该表达式与 ctrl-f 一起使用,但在语法文件中使用时会突出显示整个文档。

【问题讨论】:

  • 您能否更具体地说明“匹配”第一行的含义?
  • 只是文件的第一行。对于这种旧语言,文件的第一行是注释,除非它以数字开头。
  • Sublime 的语法高亮显示可能将\A 视为与^ 相同。 (顺便说一句,这是一个或另一个;\A^ 是多余的。)但试试这个:\A(?!\d).*$
  • 如果你创建一个sublime-syntax文件而不是旧的tmLanguage,你可以创建一个匹配的正则表达式而不需要使用\A,然后在第一行之后设置一个不同的上下文。跨度>
  • 感谢@keith-hall,我使用工具>开发人员>.tmLangugue 的新语法转换了 tmLanguage 文件。比添加 'main: - match: "^[^0-9]." 注释:匹配第一行注释范围:comment - match: "\n" push: body body:'

标签: regex syntax sublimetext3


【解决方案1】:

首先,使用 yaml 变体,这样您就可以看到自己在做什么,哈哈。

回答:让 main 成为您的第一行模式。一旦你看到任何一行的结尾,就切换到另一种模式来处理其他所有内容。永远不要回到主线 - 其他线路模式现在是你的上帝。 push 和 pop 应该可以正常工作,因为我们使用 set 而不是 push(所以 main 甚至不再在堆栈上)。

 main: # aka first line mode
  - match: '$'
    set: other.lines
  - match: '.*'
    scope: first.line

 other.lines:
  - match: '.*'
    scope: every.other.line

至于数字位,您可以将其添加到您的 $ 匹配中,作为替代的第一行交易破坏正则表达式

  - match: '^\d|$'
    set: other.lines

对于奖励积分,如果您只想匹配第一行的某些格式,只需在您范围后将它们全部设置好,然后添加 $ 规则。如果您想在此之前忽略空格,则需要在您向前看并看到无效的第一行时以及当您确实设置为正常的正文匹配器时进行设置。比如说你想突出显示第一行只有当第一行是 foo、foobar 或 foobaz 时。也许像......

 main:
  - match: 'foo(bar|baz)?'
    scope: valid.first.line
    set: other.lines # done with the first line
  - match: '(?=^\s*\S)'
    set: other.lines # looked ahead, saw non blank line, wasnt valid first line

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多