语法着色非常有用,但我在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))
答案 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
,否则更改将无法生效。
然后结束结果:
与原始行为相反:
我使用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}
正则表达式非常简单:在括号中捕获第一个组 - !
可选地后跟-
,并将其作为注释符号。然后,将任何内容匹配到行尾($
),可选地由换行符终止。我甚至都不确定以前的正则表达式是如何工作的......