Add Vue subtype onChange event

This commit is contained in:
leafOfTree
2020-10-13 14:51:25 +08:00
parent 09d82e6312
commit de581bc075
2 changed files with 61 additions and 22 deletions

View File

@@ -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