是否可以在特定语法区域内匹配语法匹配(非关键字)?我刚才有这个问题并提出了这个问题:
" lua.vim
syntax include @loveconf <sfile>:p:h/love-conf.vim
" Some time later
syntax region loveconfregion start="\<love\.conf\>" end="\<end\>"me=e-3,he=e-3,re=e-3 skipwhite skipempty containedin=ALLBUT,luaString,luaComment contains=ALL
highlight loveconf ctermfg=206
love-conf.vim看起来像这样:
" Simple example; actual file contains a regex
syntax match loveconf "\.window\.width" containedin=loveconfregion
如果可能的话,我希望将它全部移动到一个文件中。有没有办法做到这一点?
作为指南,这是一个示例文件:
-- test.lua
t.window.width = 20
-- ^ Not colored
function randomFunction()
t.window.width = 20
-- ^ Also not colored
end
function love.conf( t )
t.window.width = 20
-- ^ Colored
end
答案 0 :(得分:1)
是的,大多数语法脚本都可以使用它。这是一个简短的例子:
#start
match
#end
match
syntax region myRegion start="#start" end="#end" contains=myMatch
syntax match myMatch "match" contained
highlight link myMatch Identifier
您的示例只是错过了contained
属性。因此,loveconf
匹配任何地方,而不仅仅是loveconfregion
内部(通过containedin=
):
syntax match loveconf "\.window\.width" contained containedin=loveconfregion
:syntax include
的主要用例是在另一个语言中嵌入(子)语言。突出的例子是HTML内部的JavaScript,或Vimscript中的Python。这样可以避免重复并允许有条件地包含内容(例如,如果Vim不支持它,则Vim语法不会突出显示嵌入式Python)。
另一个用例是一种语法是另一种语言的扩展(例如,Windows Scripting Host是XML)。这通常只是:runtime! syntax/xml.vim
。