将标记之间的所有内容匹配为评论

Match everythin between tag as comment

我想强调

之间的每一件事
!&
    some explanation
&!  

作为评论。

我知道评论符合

- name: comment.line.exclamation-mark.fortran
  match: (?i)\!.*$

在我的 fortran.YAML-tmLanguage.
但我不知道如何将其扩展到上述情况。

由于注释是多行的,所以需要将正则表达式拆分为两个表达式,一个称为begin,一个称为end。 这允许您解析多行。

我并没有真正使用 YAML,但是 C tmLanguage 中的这段代码应该可以帮助您入门(注释样式为 /* COMMENT */):

<dict>
    <key>begin</key> <string>\s*/\*</string>
    <key>captures</key>
    <dict>
        <key>0</key> <dict> <key>name</key> 
        <string>punctuation.definition.comment.c</string> </dict>
    </dict>
    <key>end</key> <string>\*/</string>
    <key>name</key> <string>comment.block.c</string>
</dict>

因此您可以使用 \s\!\& 作为开始标签,使用 \&\! 作为结束标签。

我找到了以下作品。谢谢@LinuxCC。

# order matter: this block comment syntax should be before the line comment syntax
- name: comment.block.fortran
  begin: (?i)\!&
  end: (?i)&\!
  captures:
    '0': {name: comment.line.exclamation-mark.fortran}

- name: comment.line.exclamation-mark.fortran
  match: (?i)\!.*$

要使评论切换工作,您还需要在另一个文件中,

# [PackageDev] target_format: plist, ext: tmPreferences
---
name: Comments
uuid: 40e092f2-ee49-4cbd-8afb-4a5c4f581463
scope: source.fortran

settings:

  shellVariables:
  - name: TM_COMMENT_START
    value: '! '
  - name: TM_COMMENT_START_2
    value: '!&'
  - name: TM_COMMENT_END_2
    value: '&!'