vim注释语法着色,基于列值重置,不带换行符
我使用不使用断开链接的FITS文件。 以下是其中一个文件的片段:vim注释语法着色,基于列值重置,不带换行符,vim,syntax,Vim,Syntax,我使用不使用断开链接的FITS文件。 以下是其中一个文件的片段: SIMPLE = T / file does conform to FITS standard BITPIX = 8 / number of bits per data pixel NAXIS = 0 / number of data axes
SIMPLE = T / file does conform to FITS standard BITPIX = 8 / number of bits per data pixel NAXIS = 0 / number of data axes EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H TELESCOP= 'TELESCOP' / Telescope (mission) name INSTRUME= 'INST ' / Instrument name OBS_ID = '00000000000' / Observation ID TARG_ID = 00000 / Target ID SEG_NUM = 0 / Segment number TIMESYS = 'TT ' / time measured from
查看这些文件时,我使用set numberwidth=6
和set columns=86
SIMPLE = T / file does conform to FITS standard
BITPIX = 8 / number of bits per data pixel
NAXIS = 0 / number of data axes
EXTEND = T / FITS dataset may contain extensions
COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy
COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
TELESCOP= 'TELESCOP' / Telescope (mission) name
INSTRUME= 'INST ' / Instrument name
OBS_ID = '00000000000' / Observation ID
TARG_ID = 00000 / Target ID
SEG_NUM = 0 / Segment number
TIMESYS = 'TT ' / time measured from
问题是语法匹配myComment”/.*$“
显然不尊重设置列
,它会突出显示第一条注释后的所有内容。我想让它知道,第一条注释只能扩展到第80列,第二条注释在第160列结束,依此类推
编辑:
我已经创建了一个vim语法文件:
if exists("b:current_syntax")
finish
endif
syn match fitsComment1 " / .*\%80c"
hi link fitsComment1 Comment
syn match fitsComment2 "COMMENT.*\%400c"
hi link fitsComment2 Comment
syn match fitsComment2 "COMMENT.*\%480c"
hi link fitsComment2 Comment
let c1 = 80
let c2 = 160
let c = 1
while c <= 8
let regex = '" \%>' . c1 . 'c/ .*\%' . c2 . 'c"'
execute 'syn match fitsComment2 '.regex
hi link fitsComment2 Comment
let c1 += 80
let c2 += 80
let c += 1
endwhile
let b:current_syntax = "fits"
这在我的示例中明确地处理了它们,但这不是一个真正的修复,因为我并不总是知道这些多行注释将发生在哪里
有没有办法不用
while
循环就可以做到这一点?循环使读取文件非常慢(这些文件可能相当长)。您可以这样做:
syn match myComment1 " / .*\%80c"
syn match myComment2 " \%>80c/ .*\%180c"
hi link myComment1 Comment
hi link myComment2 Comment
这将使用
\%c
regex原子将正则表达式锚定到特定列。您必须创建一个新的syn匹配规则,直到您需要的所有列都被覆盖。注意,第二条注释规则被显式地锚定为在第80列之后开始,否则它将从第一个注释字符一直到最后一个(贪婪匹配)。您可以这样做:
syn match myComment1 " / .*\%80c"
syn match myComment2 " \%>80c/ .*\%180c"
hi link myComment1 Comment
hi link myComment2 Comment
这将使用
\%c
regex原子将正则表达式锚定到特定列。您必须创建一个新的syn匹配规则,直到您需要的所有列都被覆盖。请注意,第二条注释规则显式锚定为在第80列之后开始,否则它将从第一个注释字符一直到最后一个(贪婪匹配)。我已使用您的建议创建了一个语法文件,并更新了我的问题。我也有多行评论,提出了一个问题,我目前通过循环的方法是非常资源密集型的。我已经用你的建议创建了一个语法文件,并更新了我的问题。我也有多行评论,提出了一个问题,我目前通过循环的方法是非常资源密集型。