Sublime Text 3语法定义:如何捕获多行C风格的块注释?

时间:2015-03-28 11:14:59

标签: regex sublimetext sublimetext3

所以目标块是这样的:

/* some comments
   more
   end  */

/**/之间的任何内容都被视为评论。我目前的规则只是捕获单行注释:

match: \/\*(\w|\s|\W|\n|\r\n)*\*\/

我知道Sublime Text使用Oniguruma,但我不确定如何匹配多线。

2 个答案:

答案 0 :(得分:3)

我遇到了与ST3相同的问题,但有一个.sublime-syntax文件。不同之处在于,在我的语言中,块注释受!**!限制。内联评论以!开头。

以下是我使用的解决方案:

contexts:
  # The prototype context is prepended to all contexts but those setting
  # meta_include_prototype: false.
  prototype:
    - include: comments
  comments:
    # Block comments begin with !* and ends with *!
    - match: '!\*'
      scope: punctuation.definition.comment.c
      push: 
        - meta_scope: comment.block.c
        - match: '\*!'
          pop: true
    # Inline comments begin with a '!' and finish at the end of the line.
    - match: '![^\*]'
      scope: punctuation.definition.comment.c
      push:
        # This is an anonymous context push for brevity.
        - meta_scope: comment.line.double-slash.c
        - match: $\n?
          pop: true

答案 1 :(得分:2)

行。所以Joachim Pileborg的评论非常有帮助。我就是这样做的。

方法

1-安装PackageDev包。

2-将相关包复制到临时目录并解压缩。对于C,我这样做了:

cp /Applications/Sublime Text.app/Contents/MacOS/Packages/C++.sublime-package ~/tmp
cd ~/tmp
unzip C++.sublime-package

解压缩会创建许多*.tmLanguage个文件。

3-在Sublime中打开C.tmLanguage

4-在命令选项板中,选择Build with: covert to ... YAML (Block Style),这将创建C.YAML-tmLanguage

5-然后打开YAML文件并复制所需的正则表达式。

答案

对于C风格的块,此规则有效:

- begin: /\*
  captures:
    '0':
      name: punctuation.definition.comment.mn
  end: \*/
  name: comment.block.c