我用这些行定义了一个自定义文件类型:
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
Run Code Online (Sandbox Code Playgroud)
我将所有标题都附在这样的文件中:
==== Biggest Heading ==== // this will be bold and light blue
===Sub heading === // this will be yellow
bla bla bla // this will be normally formatted
Run Code Online (Sandbox Code Playgroud)
但是现在,当我在代码中使用等号时,它认为它是一个标题.反正我是否可以强迫比赛只在一条线上?
更新:我之前的回答是错误的,你可以用一个地区来做,只是做
syn region SubSubtitle start=+=+ end=+=+ oneline
Run Code Online (Sandbox Code Playgroud)
见:help syn-oneline和:help syn-arguments.猜猜它表明我现在实际上无法运行vim,嗯?
以前的答案
根据我的阅读:帮助语法,就没有办法用一个区域来做到这一点.但是,您可以使用syn-match执行此操作:
syn match SubSubtitle /=\@<!=[^=]*==\@!/
Run Code Online (Sandbox Code Playgroud)
该/=\@<!/说,没有有=立即的比赛之前,和/=\@!/说不准有=后,所以这个匹配一个=,一堆非=(不包括换行符-包括换行符它必须是\_[^=]),那么只有一个=.
其余的相似
syn match Subtitle /=\@<!=\{2}[^=]*=\{2}=\@!/
syn match Title /=\@<!=\{3}[^=]*=\{3}=\@!/
syn match MasterTitle /=\@<!=\{4}[^=]*=\{4}=\@!/
Run Code Online (Sandbox Code Playgroud)
你仍然可以在syn-matches中进行匹配,所以如果你有任何嵌套,它仍然可以工作.
例如
syn match Todo /\<TODO\>/ containedin=SubSubtitle,Subtitle,Title,MasterTitle contained
Run Code Online (Sandbox Code Playgroud)