ST2 中注释行后的命令颜色错误
Wrong coloring of commands after comment line in ST2
语法着色非常有用,但我在 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))
这可以通过将 Packages/Fortran/Syntaxes/Fortran - Modern.tmLanguage
替换为 this version 来更正。要使用,请将要点中文件的原始版本保存为 Fortran - Modern.tmLanguage
。接下来,在 Sublime 中,select 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}
正则表达式非常简单:捕获括号中的第一组 - !
可选地后跟 -
,并将其范围作为注释符号。然后,匹配直到行尾 ($
) 的所有内容,可选择以换行符终止。我什至不完全确定以前的正则表达式是如何工作的...
语法着色非常有用,但我在 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))
这可以通过将 Packages/Fortran/Syntaxes/Fortran - Modern.tmLanguage
替换为 this version 来更正。要使用,请将要点中文件的原始版本保存为 Fortran - Modern.tmLanguage
。接下来,在 Sublime 中,select 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}
正则表达式非常简单:捕获括号中的第一组 - !
可选地后跟 -
,并将其范围作为注释符号。然后,匹配直到行尾 ($
) 的所有内容,可选择以换行符终止。我什至不完全确定以前的正则表达式是如何工作的...