我已经使用以下行定义了自定义文件类型:
syn region SubSubtitle start=+=+ end=+=+
highlight SubSubtitle ctermbg=black ctermfg=DarkGrey
syn region Subtitle start=+==+ end=+==+
highlight Subtitle ctermbg=black ctermfg=DarkMagenta
syn region Title start=+===+ end=+===+
highlight Title ctermbg=black ctermfg=yellow
syn region MasterTitle start=+====+ end=+====+
highlight MasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue
我将所有标题都附在这样的文件中:
==== Biggest Heading ==== // this will be bold and light blue
===Sub heading === // this will be yellow
bla bla bla // this will be normally formatted
但是现在,当我在我的代码中使用等号时,它认为它是一个标题。反正我是否可以强迫比赛只在一条线上?
答案 0 :(得分:7)
更新:我之前的回答是错的,您可以使用某个地区执行此操作,只需执行
syn region SubSubtitle start=+=+ end=+=+ oneline
请参阅:help syn-oneline
和:help syn-arguments
。猜猜它表明我现在实际上无法运行vim,嗯?
上一个回答
根据我对:help syntax,的解读,没有办法用区域来做到这一点。但是,您可以使用syn-match执行此操作:
syn match SubSubtitle /=\@<!=[^=]*==\@!/
/=\@<!/
表示匹配前没有=
,/=\@!/
表示之后没有=
,所以这只匹配一个=
,一堆非=
(不包括换行符 - 包含新行必须\_[^=]
),然后只有一个=
。
其余的相似
syn match Subtitle /=\@<!=\{2}[^=]*=\{2}=\@!/
syn match Title /=\@<!=\{3}[^=]*=\{3}=\@!/
syn match MasterTitle /=\@<!=\{4}[^=]*=\{4}=\@!/
您仍然可以在同步匹配中进行匹配,因此如果您正在进行任何嵌套,它仍然有效。
例如
syn match Todo /\<TODO\>/ containedin=SubSubtitle,Subtitle,Title,MasterTitle contained