From de581bc0752a97134052c94fc2fc3350ca3ae3fb Mon Sep 17 00:00:00 2001 From: leafOfTree Date: Tue, 13 Oct 2020 14:51:25 +0800 Subject: [PATCH] Add Vue subtype onChange event --- autoload/vue.vim | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ indent/vue.vim | 22 ----------------- 2 files changed, 61 insertions(+), 22 deletions(-) diff --git a/autoload/vue.vim b/autoload/vue.vim index 676ffd1..ba982b5 100644 --- a/autoload/vue.vim +++ b/autoload/vue.vim @@ -12,3 +12,64 @@ function! vue#GetConfig(name, default) let name = 'g:vim_vue_plugin_'.a:name return exists(name) ? eval(name) : a:default endfunction + +" Since vue#Log and vue#GetConfig are always called +" in syntax and indent files, +" this file will be sourced when opening the first vue file +if exists('##CursorMoved') && exists('*OnChangeVueSubtype') + augroup vim_vue_plugin + autocmd! + autocmd CursorMoved,CursorMovedI,WinEnter *.vue,*.wpy + \ call s:CheckSubtype() + augroup END + + let s:subtype = '' + function! s:CheckSubtype() + let subtype = GetVueSubtype() + + if s:subtype != subtype + call OnChangeVueSubtype(subtype) + let s:subtype = subtype + endif + endfunction +endif + +function! s:SynsEOL(lnum) + let lnum = prevnonblank(a:lnum) + let col = strlen(getline(lnum)) + return map(synstack(lnum, col), 'synIDattr(v:val, "name")') +endfunction + +function! GetVueSubtype() + let lnum = line('.') + let cursyns = s:SynsEOL(lnum) + let syn = get(cursyns, 0, '') + let subtype = matchstr(syn, '\w\+\zeVue') + if subtype =~ 'css\w\+' + let subtype = subtype[3:] + endif + let subtype = tolower(subtype) + return subtype +endfunction + +function! GetVueTag(...) + if a:0 > 0 + let lnum = a:1 + else + let lnum = line('.') + endif + let cursyns = s:SynsEOL(lnum) + let syn = get(cursyns, 0, '') + + if syn =~ 'VueTemplate' + let tag = 'template' + elseif syn =~ 'VueScript' + let tag = 'script' + elseif syn =~ 'VueStyle' + let tag = 'style' + else + let tag = '' + endif + + return tag +endfunction diff --git a/indent/vue.vim b/indent/vue.vim index 8ac5b20..ee06bbc 100644 --- a/indent/vue.vim +++ b/indent/vue.vim @@ -293,28 +293,6 @@ function! s:PrevNonBlacnkNonComment(lnum) endwhile return prevlnum endfunction - -function! GetVueTag(...) - if a:0 > 0 - let lnum = a:1 - else - let lnum = getcurpos()[1] - endif - let cursyns = s:SynsEOL(lnum) - let syn = get(cursyns, 0, '') - - if syn =~ 'VueTemplate' - let tag = 'template' - elseif syn =~ 'VueScript' - let tag = 'script' - elseif syn =~ 'VueStyle' - let tag = 'style' - else - let tag = '' - endif - - return tag -endfunction "}}} let b:did_indent = 1