"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Vim syntax file " " Language: Vue " Maintainer: leaf " " CREDITS: Inspired by mxw/vim-jsx. " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" if exists("b:current_syntax") && b:current_syntax == 'vue' finish endif " For advanced users, this variable can be used to avoid overload let b:current_loading_main_syntax = 'vue' """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Config {{{ " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let s:load_full_syntax = vue#GetConfig("load_full_syntax", 0) let s:use_pug = vue#GetConfig("use_pug", 0) let s:use_less = vue#GetConfig("use_less", 0) let s:use_sass = vue#GetConfig("use_sass", 0) let s:use_scss = vue#GetConfig("use_scss", 0) let s:use_stylus = vue#GetConfig("use_stylus", 0) let s:use_coffee = vue#GetConfig("use_coffee", 0) let s:use_typescript = vue#GetConfig("use_typescript", 0) "}}} """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Functions {{{ " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! s:LoadSyntax(group, type) if s:load_full_syntax call s:LoadFullSyntax(a:group, a:type) else call s:LoadDefaultSyntax(a:group, a:type) endif endfunction function! s:LoadDefaultSyntax(group, type) unlet! b:current_syntax let syntaxPaths = ['$VIMRUNTIME', '$VIM/vimfiles', '$HOME/.vim'] for path in syntaxPaths let file = expand(path).'/syntax/'.a:type.'.vim' if filereadable(file) execute 'syntax include '.a:group.' '.file endif endfor endfunction " Load all syntax files in 'runtimepath' " Useful if there is no default syntax file provided by vim function! s:LoadFullSyntax(group, type) call s:SetCurrentSyntax(a:type) execute 'syntax include '.a:group.' syntax/'.a:type.'.vim' endfunction " Settings to avoid syntax overload function! s:SetCurrentSyntax(type) if a:type == 'coffee' syntax cluster coffeeJS contains=@htmlJavaScript " Avoid overload of `javascript.vim` let b:current_syntax = 'vue' else unlet! b:current_syntax endif endfunction "}}} """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Load main syntax {{{ " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Load syntax/html.vim to syntax group, which loads full JavaScript and CSS " syntax. It defines group htmlJavaScript and htmlCss. call s:LoadSyntax('@HTMLSyntax', 'html') " Load vue-html syntax runtime syntax/vue-html.vim " Avoid overload if !hlexists('cssTagName') call s:LoadSyntax('@htmlCss', 'css') endif " Avoid overload if !hlexists('javaScriptComment') call vue#Log('load javascript cluster') call s:LoadSyntax('@htmlJavaScript', 'javascript') endif " Load vue-javascript syntax runtime syntax/vue-javascript.vim "}}} """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Load pre-processors syntax {{{ " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " If pug is enabled, load vim-pug syntax if s:use_pug call s:LoadFullSyntax('@PugSyntax', 'pug') syn cluster htmlJavascript remove=javascriptParenthesisBlock endif " If less is enabled, load less syntax if s:use_less call s:LoadSyntax('@LessSyntax', 'less') runtime! after/syntax/less.vim endif " If sass is enabled, load sass syntax if s:use_sass call s:LoadSyntax('@SassSyntax', 'sass') runtime! after/syntax/sass.vim endif " If scss is enabled, load sass syntax if s:use_scss call s:LoadSyntax('@ScssSyntax', 'scss') runtime! after/syntax/scss.vim endif " If stylus is enabled, load stylus syntax if s:use_stylus call s:LoadFullSyntax('@StylusSyntax', 'stylus') runtime! after/syntax/stylus.vim endif " If CoffeeScript is enabled, load the syntax. Keep name consistent with " vim-coffee-script/after/html.vim if s:use_coffee call s:LoadFullSyntax('@htmlCoffeeScript', 'coffee') endif " If TypeScript is enabled, load the syntax. if s:use_typescript call s:LoadFullSyntax('@TypeScript', 'typescript') endif "}}} """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Syntax highlight {{{ " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " All start with html/javascript/css for emmet-vim in-file type detection syntax region htmlVueTemplate fold \ start=+]*>+ \ end=+^+ \ keepend contains=@HTMLSyntax " When template code is not well indented syntax region htmlVueTemplate fold \ start=+]*>+ \ end=+\ze\n\(^$\n\)*<\(script\|style\)+ \ keepend contains=@HTMLSyntax syntax region javascriptVueScript fold \ start=+]*>+ \ end=++ \ keepend contains=@htmlJavaScript,jsImport,jsExport,vueTag syntax region cssVueStyle fold \ start=+]*>+ \ end=++ \ keepend contains=@htmlCss,vueTag " Preprocessors syntax syntax region pugVueTemplate fold \ start=+]*lang=["']pug["'][^>]*>+ \ end=++ \ keepend contains=@PugSyntax,vueTag syntax region coffeeVueScript fold \ start=+]*lang=["']coffee["'][^>]*>+ \ end=++ \ keepend contains=@htmlCoffeeScript,jsImport,jsExport,vueTag syntax region typescriptVueScript fold \ start=+]*lang=["']ts["'][^>]*>+ \ end=++ \ keepend contains=@TypeScript,vueTag syntax region cssLessVueStyle fold \ start=+]*lang=["']less["'][^>]*>+ \ end=++ \ keepend contains=@LessSyntax,vueTag syntax region sassVueStyle fold \ start=+]*lang=["']sass["'][^>]*>+ \ end=++ \ keepend contains=@SassSyntax,vueTag syntax region cssScssVueStyle fold \ start=+]*lang=["']scss["'][^>]*>+ \ end=++ \ keepend contains=@ScssSyntax,vueTag " Backward compatiable for `use_sass` option if s:use_sass && !s:use_scss syntax region cssScssVueStyle fold \ start=+]*lang=["']scss["'][^>]*>+ \ end=++ \ keepend contains=@SassSyntax,vueTag endif syntax region cssStylusVueStyle fold \ start=+]*lang=["']stylus["'][^>]*>+ \ end=++ \ keepend contains=@StylusSyntax,vueTag syntax region vueTag fold \ start=+^<[^/]+ end=+>+ skip=+>+ \ contains=htmlTagN,htmlString,htmlArg highlight default link vueTag htmlTag highlight default link cssUnitDecorators2 Number highlight default link cssKeyFrameProp2 Constant "}}} """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " Syntax patch {{{ " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Patch 7.4.1142 if has("patch-7.4-1142") if has("win32") syntax iskeyword @,48-57,_,128-167,224-235,$,- else syntax iskeyword @,48-57,_,192-255,$,- endif else setlocal iskeyword+=- endif " Style " Redefine (less|sass|stylus)Definition to highlight