ST2中注释行后命令的颜色错误

时间:2016-02-11 16:16:49

标签: syntax sublimetext2

语法着色非常有用,但我在Sublime Text 2中遇到问题。特别是当以命令开头的行(如Fortran中的 ALLOCATE )在一条或多条注释行之后,该命令将颜色更改为变量。

ALLOCATE(XYZ%CC(3,NC(1),NC(2),NC(3)))
!ALLOCATE(XYZ%CV(3,NF(1),NF(2),NF(3)))
ALLOCATE(XYZ%CV(3,NC(1)+1,NC(2)+1,NC(3)+1))

enter image description here

1 个答案:

答案 0 :(得分:2)

Packages/Fortran/Syntaxes/Fortran - Modern.tmLanguage替换为this version可以更正此问题。要使用,请将文件的原始版本保存为gist Fortran - Modern.tmLanguage。接下来,在Sublime中,选择 Preferences → Browse Packages… 以打开操作系统文件管理器中的Packages文件夹。打开Fortran/Syntaxes文件夹,将现有的Fortran - Modern.tmLanguage文件替换为新文件。此外,请务必删除Fortran - Modern.tmLanguage.cache,否则更改将无法生效。

然后结束结果:

final

与原始行为相反:

original

为什么需要进行更改以及如何进行更改

我使用PackageDev将基于XML的.tmLanguage文件转换为更易读的基于YAML的格式。其中,有两个部分定义了注释,一个用于以!-开头的注释块:

- begin: (^[ \t]+)?(?=!-)
  beginCaptures:
    '1': {name: punctuation.whitespace.comment.leading.ruby}
  end: (?!\G)
  patterns:
  - name: comment.line.exclamation.mark.fortran.modern
    begin: '!-'
    beginCaptures:
      '0': {name: punctuation.definition.comment.fortran}
    end: \n
    patterns:
    - match: \\\s*\n

和一个以!开头的评论:

- begin: (^[ \t]+)?(?=!)
  beginCaptures:
    '1': {name: punctuation.whitespace.comment.leading.ruby}
  end: (?!\G)
  patterns:
  - name: comment.line.exclamation.fortran.modern
    begin: '!'
    beginCaptures:
      '0': {name: punctuation.definition.comment.fortran}
    end: \n
    patterns:
    - match: \\\s*\n

这种额外的复杂性是不必要和混乱的,甚至不是正确的方式。不需要punctuation.whitespace.comment.leading范围(.ruby后缀来自哪里?),实际评论块的正则表达式过于复杂和不正确。

我删除了上述两个部分,并将其替换为以下简单部分:

- name: comment.line.exclamation.fortran.modern
  match: (!-?).*$\n?
  captures:
    '1': {name: punctuation.definition.comment.fortran}

正则表达式非常简单:在括号中捕获第一个组 - !可选地后跟-,并将其作为注释符号。然后,将任何内容匹配到行尾($),可选地由换行符终止。我甚至都不确定以前的正则表达式是如何工作的......