" " nextag.vim - Move to next and previous tags in a SGML document, including " XML and HTML. Use . and , to search for the next and " previous tags, respectively. Prepended counts work, e.g. 5. as do " operations, e.g. d. and visual mode e.g. v,. Doesn't match " SGML comments or !DOCTYPES. " " Maintainer: Tom Ryder " " " Wrapper to prevent overloading and signal our presence, and check we're not " in compatible mode or running a version of Vim that's too old. " if exists('g:loaded_nextag') || &compatible || v:version < 700 finish endif let g:loaded_nextag = 1 " " Search for a SGML tag with the specified flag. " function! s:MoveToSGMLTag(direction, mode, count) if a:mode ==# 'v' normal! gv endif let l:visualfix = a:mode ==# 'v' && a:direction ==# 'next' && &selection !=# 'exclusive' ? 1 : 0 for l:iteration in range(1, a:count) call search('\m<\/\?\w\+[^>]*>', a:direction ==# 'next' ? 'W' : 'Wb') if l:visualfix normal! l endif endfor if l:visualfix normal! h endif endfunction " " Default remappings. " for s:mode in ['n', 'o', 'v'] execute s:mode . 'map . :call MoveToSGMLTag("next", "' . s:mode . '", v:count1)' execute s:mode . 'map , :call MoveToSGMLTag("prev", "' . s:mode . '", v:count1)' endfor