summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2017-02-02 21:49:51 +0100
committerAdam Stankiewicz <sheerun@sher.pl>2017-02-02 21:49:51 +0100
commitcc868aee51c3880f08832cca0bf1351334d61794 (patch)
treee66ecd0ead35e53dd16283d6757410cd276bcb83
parent39036a553f353ffb70ec4ad25c0789567fb3518d (diff)
downloadvim-polyglot-cc868aee51c3880f08832cca0bf1351334d61794.tar.gz
vim-polyglot-cc868aee51c3880f08832cca0bf1351334d61794.zip
Add vue support, closes #160
Diffstat (limited to '')
-rw-r--r--README.md1
-rw-r--r--after/ftplugin/vue.vim5
-rwxr-xr-xbuild1
-rw-r--r--ftdetect/polyglot.vim7
-rw-r--r--ftplugin/vue.vim14
-rw-r--r--indent/vue.vim45
-rw-r--r--syntax/vue.vim112
7 files changed, 185 insertions, 0 deletions
diff --git a/README.md b/README.md
index 8a653cde..e4230c90 100644
--- a/README.md
+++ b/README.md
@@ -117,6 +117,7 @@ If you need full functionality of any plugin, please use it directly with your p
- [vala](https://github.com/tkztmk/vim-vala) (syntax, indent, ftdetect)
- [vbnet](https://github.com/vim-scripts/vbnet.vim) (syntax)
- [vcl](https://github.com/smerrill/vcl-vim-plugin) (syntax, ftdetect)
+- [vue](https://github.com/posva/vim-vue) (syntax, indent, ftplugin, ftdetect)
- [vm](https://github.com/lepture/vim-velocity) (syntax, indent, ftdetect)
- [xls](https://github.com/vim-scripts/XSLT-syntax) (syntax)
- [yaml](https://github.com/stephpy/vim-yaml) (syntax, ftplugin)
diff --git a/after/ftplugin/vue.vim b/after/ftplugin/vue.vim
new file mode 100644
index 00000000..fd786923
--- /dev/null
+++ b/after/ftplugin/vue.vim
@@ -0,0 +1,5 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
+
+setlocal suffixesadd+=.vue
+
+endif
diff --git a/build b/build
index 430b737f..be83c164 100755
--- a/build
+++ b/build
@@ -190,6 +190,7 @@ PACKS="
vala:tkztmk/vim-vala
vbnet:vim-scripts/vbnet.vim
vcl:smerrill/vcl-vim-plugin
+ vue:posva/vim-vue
vm:lepture/vim-velocity
xls:vim-scripts/XSLT-syntax
yaml:stephpy/vim-yaml
diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim
index 54229aa7..f431def0 100644
--- a/ftdetect/polyglot.vim
+++ b/ftdetect/polyglot.vim
@@ -1000,4 +1000,11 @@ au BufRead,BufNewFile *.vm set ft=velocity syntax=velocity
endif
+" ftdetect/vue.vim
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
+
+au BufNewFile,BufRead *.vue setf vue.html.javascript.css
+
+endif
+
augroup END
diff --git a/ftplugin/vue.vim b/ftplugin/vue.vim
new file mode 100644
index 00000000..9b4ec9b1
--- /dev/null
+++ b/ftplugin/vue.vim
@@ -0,0 +1,14 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
+
+" Vim filetype plugin
+" Language: Vue.js
+" Maintainer: Eduardo San Martin Morote
+" Author: Adriaan Zonnenberg
+
+if exists("b:did_ftplugin")
+ finish
+endif
+
+runtime! ftplugin/html.vim
+
+endif
diff --git a/indent/vue.vim b/indent/vue.vim
new file mode 100644
index 00000000..e754ff6b
--- /dev/null
+++ b/indent/vue.vim
@@ -0,0 +1,45 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
+
+" Vim indent file
+" Language: Vue.js
+" Maintainer: Eduardo San Martin Morote
+" Author: Adriaan Zonnenberg
+
+if exists("b:did_indent")
+ finish
+endif
+
+" Load indent files for required languages
+for language in ['stylus', 'pug', 'css', 'javascript', 'html', 'coffee']
+ unlet! b:did_indent
+ exe "runtime! indent/".language.".vim"
+ exe "let s:".language."indent = &indentexpr"
+endfor
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetVueIndent()
+
+if exists("*GetVueIndent")
+ finish
+endif
+
+function! GetVueIndent()
+ if searchpair('<template lang="pug"', '', '</template>', 'bWr')
+ exe "let indent = ".s:pugindent
+ elseif searchpair('<style lang="stylus"', '', '</style>', 'bWr')
+ exe "let indent = ".s:stylusindent
+ elseif searchpair('<style', '', '</style>', 'bWr')
+ exe "let indent = ".s:cssindent
+ elseif searchpair('<script lang="coffee"', '', '</script>', 'bWr')
+ exe "let indent = ".s:coffeeindent
+ elseif searchpair('<script', '', '</script>', 'bWr')
+ exe "let indent = ".s:javascriptindent
+ else
+ exe "let indent = ".s:htmlindent
+ endif
+
+ return indent > -1 ? indent : s:htmlindent
+endfunction
+
+endif
diff --git a/syntax/vue.vim b/syntax/vue.vim
new file mode 100644
index 00000000..89b5b794
--- /dev/null
+++ b/syntax/vue.vim
@@ -0,0 +1,112 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vue') == -1
+
+" Vim syntax file
+" Language: Vue.js
+" Maintainer: Eduardo San Martin Morote
+
+if exists("b:current_syntax")
+ finish
+endif
+
+if !exists("s:syntaxes")
+ " Search available syntax files.
+ function s:search_syntaxes(...)
+ let syntaxes = {}
+ let names = a:000
+ for name in names
+ let syntaxes[name] = 0
+ endfor
+
+ for path in split(&runtimepath, ',')
+ if isdirectory(path . '/syntax')
+ for name in names
+ let syntaxes[name] = syntaxes[name] || filereadable(path . '/syntax/' . name . '.vim')
+ endfor
+ endif
+ endfor
+ return syntaxes
+ endfunction
+
+ let s:syntaxes = s:search_syntaxes('pug', 'slm', 'coffee', 'stylus', 'sass', 'scss', 'less')
+endif
+
+
+syntax include @HTML syntax/html.vim
+if exists("b:current_syntax")
+ unlet b:current_syntax
+endif
+syntax region html keepend start=/^<template>/ end=/^<\/template>/ contains=@HTML fold
+
+if s:syntaxes.pug
+ syntax include @PUG syntax/pug.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ syntax region pug keepend start=/<template lang=\("\|'\)[^\1]*pug[^\1]*\1>/ end="</template>" contains=@PUG fold
+ syntax region pug keepend start=/<template lang=\("\|'\)[^\1]*jade[^\1]*\1>/ end="</template>" contains=@PUG fold
+endif
+
+if s:syntaxes.slm
+ syntax include @SLM syntax/slm.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ syntax region slm keepend start=/<template lang=\("\|'\)[^\1]*slm[^\1]*\1>/ end="</template>" contains=@SLM fold
+endif
+
+syntax include @JS syntax/javascript.vim
+if exists("b:current_syntax")
+ unlet b:current_syntax
+endif
+syntax region javascript keepend matchgroup=Delimiter start=/<script\( lang="babel"\)\?\( type="text\/babel"\)\?>/ end="</script>" contains=@JS fold
+
+if s:syntaxes.coffee
+ syntax include @COFFEE syntax/coffee.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ " Matchgroup seems to be necessary for coffee
+ syntax region coffee keepend matchgroup=Delimiter start="<script lang=\"coffee\">" end="</script>" contains=@COFFEE fold
+endif
+
+syntax include @CSS syntax/css.vim
+if exists("b:current_syntax")
+ unlet b:current_syntax
+endif
+syntax region css keepend start=/<style\( \+scoped\)\?>/ end="</style>" contains=@CSS fold
+
+if s:syntaxes.stylus
+ syntax include @stylus syntax/stylus.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ syntax region stylus keepend start=/<style lang=\("\|'\)[^\1]*stylus[^\1]*\1\( \+scoped\)\?>/ end="</style>" contains=@stylus fold
+endif
+
+if s:syntaxes.sass
+ syntax include @sass syntax/sass.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ syntax region sass keepend start=/<style\( \+scoped\)\? lang=\("\|'\)[^\1]*sass[^\1]*\1\( \+scoped\)\?>/ end="</style>" contains=@sass fold
+endif
+
+if s:syntaxes.scss
+ syntax include @scss syntax/scss.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ syntax region scss keepend start=/<style\( \+scoped\)\? lang=\("\|'\)[^\1]*scss[^\1]*\1\( \+scoped\)\?>/ end="</style>" contains=@scss fold
+endif
+
+if s:syntaxes.less
+ syntax include @less syntax/less.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ syntax region less keepend matchgroup=PreProc start=/<style\%( \+scoped\)\? lang=\("\|'\)[^\1]*less[^\1]*\1\%( \+scoped\)\?>/ end="</style>" contains=@less fold
+endif
+
+let b:current_syntax = "vue"
+
+endif