123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- "
- " Config {{{
- "
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- let s:config = vue#GetConfig('config', {})
- let s:attribute = s:config.attribute
- "}}}
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- "
- " Syntax highlight {{{
- "
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Clear htmlHead that may cause highlighting out of bounds
- silent! syntax clear htmlHead
- " html5 data-*
- syntax match htmlArg '\v<data(-[.a-z0-9]+)+>' containedin=@html
- " Vue ref attribute
- syntax match htmlArg 'ref' containedin=@html
- " Use syn-match in order to highlight both transition and transition-group
- " according to syn-priority
- syntax match VueComponentName containedin=htmlTagN '\v(component|slot|transition)'
- syntax match VueComponentName containedin=htmlTagN '\v\C<[a-z0-9]+(-[a-z0-9]+)+>'
- syntax match VueComponentName containedin=htmlTagN '\v\C<([A-Z][a-zA-Z0-9]+)+>'
- syntax match VueAttr '\v(\S)@<![v:\@][^=/>[:blank:]]+(\=\"[^"]*\")?'
- \ keepend
- \ containedin=htmlTag
- \ contains=VueKey,VueQuote
- syntax match VueKey contained '\v[v:\@][^=/>[:blank:]]+'
- syntax region VueQuote contained
- \ start='"' end='"'
- \ contains=VueValue
- syntax match VueInject contained '\v\$\w*'
- syntax region VueExpression
- \ containedin=ALLBUT,htmlComment
- \ matchgroup=VueBrace
- \ transparent
- \ start="{{"
- \ end="}}"
- " Just to avoid error when using pattern in containedin
- syntax match htmlTemplateBlock /htmlTemplateBlock/
- syntax region VueExpression
- \ containedin=VueValue,htmlString,htmlValue,.*TemplateBlock,html.*Block
- \ contains=@simpleJavascriptExpression
- \ matchgroup=VueBrace
- \ start="{{"
- \ end="}}"
- " Transition attributes
- syntax match htmlArg contained "\<\(enter-from-class\|enter-active-class\|enter-to-class\|leave-from-class\|leave-active-class\|leave-to-class\)\>"
- " Wepy directive syntax
- syntax match VueAttr '\v(\S)@<!wx[^\=>[:blank:]]+(\=\"[^"]*\")?'
- \ containedin=htmlTag
- \ contains=VueKey,VueQuote
- " Mini program syntax
- syntax match VueKey contained '\vwx[^\=>[:blank:]]+'
- syntax match VueCustomTag containedin=htmlTagN '\v<(view|text|block|image|checkbox|radio)>'
- syntax cluster simpleJavascriptExpression
- \ contains=javaScriptStringS,javaScriptStringD
- \,javaScriptTemplateString,javascriptNumber
- \,javaScriptOperator,htmlJavaScriptOperator
- " JavaScript syntax
- syntax region javaScriptStringS
- \ start=+'+ skip=+\\\\\|\\'+ end=+'\|$+ contained
- syntax region javaScriptStringD
- \ start=+"+ skip=+\\\\\|\\"+ end=+"\|$+ contained
- syntax region javaScriptTemplateString
- \ start=+`+ skip=+\\`+ end=+`|$+ contained
- \ contains=javaScriptTemplateExpression
- syntax region javaScriptTemplateExpression
- \ matchgroup=VueBrace
- \ start=+${+ end=+}+ contained
- \ contains=@simpleJavascriptExpression
- syntax match javaScriptNumber '\v<-?\d+L?>|0[xX][0-9a-fA-F]+>' contained
- syntax match htmlJavaScriptOperator '[-!|&+<>=%*~^]' contained
- syntax match htmlJavaScriptOperator '\v(*)@<!/(/|*)@!' contained
- syntax keyword htmlJavaScriptOperator delete instanceof typeof void new in of contained
- highlight default link VueAttr htmlTag
- if s:attribute
- syntax match VueValue contained '\v\"\zs[^"]+\ze\"'
- \ contains=VueInject,@simpleJavascriptExpression
- highlight default link VueKey Type
- highlight default link VueQuote VueAttr
- highlight default link VueValue None
- else
- syntax match VueValue contained '\v\"\zs[^"]+\ze\"'
- highlight default link VueKey htmlArg
- highlight default link VueQuote String
- highlight default link VueValue String
- endif
- highlight default link VueInject Constant
- highlight default link VueBrace Type
- highlight default link VueComponentName htmlTagName
- highlight default link VueCustomTag htmlTagName
- highlight default link javaScriptStringS String
- highlight default link javaScriptStringD String
- highlight default link javaScriptTemplateString String
- highlight default link javaScriptNumber Constant
- highlight default link htmlJavaScriptOperator Operator
- "}}}
- " vim: fdm=marker
|