" " 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 let s:tag = '\m<\/\?\w\+[^>]*>' " " Search for a SGML tag with the specified flag. " function! s:MoveToSGMLTag(direction, mode) 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, v:count1) call search(s:tag, a:direction ==# 'next' ? 'W' : 'Wb') if l:visualfix normal! l endif endfor if l:visualfix normal! h endif endfunction " " Default remappings. " nnoremap \ . \ :call MoveToSGMLTag('next', 'n') nnoremap \ , \ :call MoveToSGMLTag('prev', 'n') onoremap \ . \ :call MoveToSGMLTag('next', 'o') onoremap \ , \ :call MoveToSGMLTag('prev', 'o') vnoremap \ . \ :call MoveToSGMLTag('next', 'v') vnoremap \ , \ :call MoveToSGMLTag('prev', 'v')