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

Syntax ST2中注释行后的命令颜色错误,syntax,sublimetext2,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)) 可以通过将软件包/Fortran/Syntaxes/F

语法着色是非常有用的,但我在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))

可以通过将
软件包/Fortran/Syntaxes/Fortran-Modern.tmLanguage
替换为来纠正这一问题。要使用,请将gist中文件的原始版本另存为
Fortran-Modern.tmLanguage
。接下来,在Sublime中,选择
首选项→ 浏览软件包…
打开操作系统文件管理器中的
软件包
文件夹。打开
Fortran/Syntaxes
文件夹,用新文件替换现有的
Fortran-Modern.tmLanguage
文件。另外,请确保删除
Fortran-Modern.tmLanguage.cache
,否则更改将不会生效

最终结果是:

与原始行为相比:


为什么需要改变,以及它是如何工作的 我曾经将基于XML的
.tmLanguage
文件翻译成更可读的基于YAML的格式。其中有两个部分定义注释,一个用于以
开头的注释块-

-开始:(^[\t]+)(?=!-)
开始捕捉:
'1':{name:标点符号.空格.注释.前导.ruby}
结束:(?!\G)
模式:
-名称:comment.line.惊叹号.mark.fortran.modern
开始:“!-”
开始捕捉:
“0”:{name:标点符号.定义.注释.fortran}
结束:\n
模式:
-匹配:\\\s*\n
还有一个是以
开头的注释

-开始:(^[\t]+)(?=!)
开始捕捉:
'1':{name:标点符号.空格.注释.前导.ruby}
结束:(?!\G)
模式:
-名称:comment.line.惊叹号.fortran.modern
开始:“!”
开始捕捉:
“0”:{name:标点符号.定义.注释.fortran}
结束:\n
模式:
-匹配:\\\s*\n
这种额外的复杂性是不必要的和令人困惑的,甚至不是正确的方法。不需要
标点符号、空格、注释、前导
范围(以及
.ruby
后缀从何而来?),实际注释块的正则表达式过于复杂且不正确

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

-名称:comment.line.惊叹号.fortran.modern
匹配:(!-?).$\n?
捕获:
'1':{name:标点符号.definition.comment.fortran}

正则表达式非常简单:捕获括号中的第一个组-a
后接一个
-
,并将其范围限定为注释符号。然后,将任何内容匹配到行尾(
$
),可选地以换行符结尾。我甚至不能完全确定以前的正则表达式是如何工作的…

这是一个bug。将此问题作为问题报告给语法突出显示文件的作者。我投票将此问题作为非主题结束,因为这不是问题,而是错误报告。好的。我以为有解决办法。我是否应该删除这个“问题”?你能建议我报告此类问题的最有效方式吗?值得一提的是,这个问题与使用的特定配色方案无关。这是一个有效的问题。这并不是离题,虽然它可能是一个bug,但它显然与用于编程的工具有关,而且可能有人有答案。这太糟糕了,我不能接受这样一个完整的答案两次!非常感谢你!