diff --git a/autoload/emmet.vim b/autoload/emmet.vim index 12ed9a9..efafc3f 100644 --- a/autoload/emmet.vim +++ b/autoload/emmet.vim @@ -785,15 +785,28 @@ function! emmet#updateTag() abort if empty(current) return '' endif + let old_tag_name = current.name let str = substitute(input('Enter Abbreviation: ', ''), '^\s*\(.*\)\s*$', '\1', 'g') + let tag_changed = str =~# '^\s*\w' let item = emmet#parseIntoTree(str, type).child[0] for k in keys(item.attr) let current.attr[k] = item.attr[k] endfor + if tag_changed + let current.name = item.name + endif let html = substitute(emmet#toString(current, 'html', 1), '\n', '', '') let html = substitute(html, '\${cursor}', '', '') let html = matchstr(html, '^<[^><]\+>') + if tag_changed + let pos2 = searchpairpos('<' . old_tag_name . '\>[^>]*>', '', '', 'W') + if pos2 != [0, 0] + let html .= emmet#util#getContent([region[1], pos2])[1:-2] + let html .= '' + let region = [region[0], [pos2[0], pos2[1] + len(old_tag_name) + 3]] + endif + endif call emmet#util#setContent(region, html) return '' endfunction diff --git a/autoload/emmet/lang/html.vim b/autoload/emmet/lang/html.vim index fad887a..20bbf1c 100644 --- a/autoload/emmet/lang/html.vim +++ b/autoload/emmet/lang/html.vim @@ -736,11 +736,11 @@ endfunction function! emmet#lang#html#parseTag(tag) abort let current = emmet#newNode() - let mx = '<\([a-zA-Z][a-zA-Z0-9]*\)\(\%(\s[a-zA-Z][a-zA-Z0-9]\+=\?\%([^"'' \t]\+\|"[^"]\{-}"\|''[^'']\{-}''\)\s*\)*\)\(/\{0,1}\)>' + let mx = '<\([a-zA-Z][a-zA-Z0-9-]*\)\(\%(\s[a-zA-Z][a-zA-Z0-9-]\+=\?\%([^"'' \t]\+\|"[^"]\{-}"\|''[^'']\{-}''\)\s*\)*\)\(/\{0,1}\)>' let match = matchstr(a:tag, mx) let current.name = substitute(match, mx, '\1', 'i') let attrs = substitute(match, mx, '\2', 'i') - let mx = '\([a-zA-Z0-9]\+\)\(\(=[^"'' \t]\+\)\|="\([^"]\{-}\)"\|=''\([^'']\{-}\)''\)\?' + let mx = '\([a-zA-Z0-9-]\+\)\(\(=[^"'' \t]\+\)\|="\([^"]\{-}\)"\|=''\([^'']\{-}\)''\)\?' while len(attrs) > 0 let match = matchstr(attrs, mx) if len(match) == 0