我用以下几行定义了一个自定义文件类型:
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
但是现在,无论何时我在代码中使用等号都认为它是标题。无论如何,我是否可以强制一场比赛只能在一行上进行?
最佳答案
更新:我以前的答案是错误的,您可以使用区域来执行此操作,只需执行
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中进行匹配,因此,如果正在进行任何嵌套,它将仍然有效。
例如
syn match Todo /\<TODO\>/ containedin=SubSubtitle,Subtitle,Title,MasterTitle contained
关于unix - Vim语法突出显示: make region only match on one line,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2462380/