" ragtag.vim - Ghetto XML/HTML mappings (formerly allml.vim) " Author: Tim Pope " Version: 2.0 " GetLatestVimScripts: 1896 1 :AutoInstall: ragtag.vim if exists("g:loaded_ragtag") || &cp finish endif let g:loaded_ragtag = 1 if has("autocmd") augroup ragtag autocmd! autocmd FileType *html*,wml,xml,xslt,xsd,jsp call s:Init() autocmd FileType php,asp*,cf,mason,eruby call s:Init() if version >= 700 autocmd InsertLeave * call s:Leave() endif autocmd CursorHold * if exists("b:loaded_ragtag") | call s:Leave() | endif augroup END endif inoremap ragtagHtmlComplete =htmlEn()=htmlDis() " Public interface, for if you have your own filetypes to activate on function! RagtagInit() call s:Init() endfunction function! AllmlInit() call s:Init() endfunction function! s:Init() let b:loaded_ragtag = 1 inoremap xmlversion =toupper(charset())"?> inoremap htmltrans inoremap xhtmltrans if s:subtype() == "xml" imap O else imap ] >O endif " <% %> if &ft == "eruby" inoremap - <%-%>3hi inoremap _ I<%A-%>Fs elseif &ft == "cf" inoremap - inoremap _ else imap - >2hi imap _ IA>Fs endif " Comments if &ft =~ '^asp' imap ' '>2hi imap " I'A>Fs let b:surround_35 = maparg("","i")."' \r ".maparg(">","i") elseif &ft == "jsp" inoremap ' %----%>4hi inoremap " I<%--A--%>Fs let b:surround_35 = "<%-- \r --%>" elseif &ft == "cf" inoremap ' !------>4hi inoremap " IFs setlocal commentstring= let b:surround_35 = "" elseif &ft == "html" || &ft == "xml" || &ft == "xhtml" inoremap ' !---->3hi inoremap " IFs let b:surround_35 = "" elseif &ft == "django" inoremap ' {##}2hi inoremap " I{#A#}Fs let b:surround_35 = "{# \r #}" else imap ' #>2hi imap " I#A>Fs let b:surround_35 = maparg("","i")."# \r ".maparg(">","i") endif imap % ragtagUrlEncode imap & ragtagXmlEncode imap % ragtagUrlV imap & ragtagXmlV if !exists("b:did_indent") if s:subtype() == "xml" runtime! indent/xml.vim else runtime! indent/html.vim endif endif " Pet peeve. Do people still not close their

and

  • tags? if exists("g:html_indent_tags") && g:html_indent_tags !~ '\\|p\>' let g:html_indent_tags = g:html_indent_tags.'\|p\|li\|dt\|dd' endif set indentkeys+=!^F let b:surround_indent = 1 silent doautocmd User ragtag silent doautocmd User allml endfunction function! s:Leave() call s:disableescape() endfunction function! s:length(str) return strlen(substitute(a:str,'.','.','g')) endfunction function! s:repeat(str,cnt) let cnt = a:cnt let str = "" while cnt > 0 let str = str . a:str let cnt = cnt - 1 endwhile return str endfunction function! s:doctypeSeek() if !exists("b:ragtag_doctype_index") if exists("b:allml_doctype_index") let b:ragtag_doctype_index = b:allml_doctype_index elseif &ft == 'xhtml' || &ft == 'eruby' let b:ragtag_doctype_index = 10 elseif &ft != 'xml' let b:ragtag_doctype_index = 7 endif endif let index = b:ragtag_doctype_index - 1 return (index < 0 ? s:repeat("\",-index) : s:repeat("\",index)) endfunction function! s:stylesheetTag() if !exists("b:ragtag_stylesheet_link_tag") if exists("b:allml_stylesheet_link_tag") let b:ragtag_stylesheet_link_tag = b:allml_stylesheet_link_tag else let b:ragtag_stylesheet_link_tag = "" endif endif return s:insertTag(b:ragtag_stylesheet_link_tag) endfunction function! s:javascriptIncludeTag() if !exists("b:ragtag_javascript_include_tag") if exists("b:allml_javascript_include_tag") let b:ragtag_javascript_include_tag = b:allml_javascript_include_tag else let b:ragtag_javascript_include_tag = "" endif endif return s:insertTag(b:ragtag_javascript_include_tag) endfunction function! s:insertTag(tag) let tag = a:tag if s:subtype() == "html" let tag = substitute(a:tag,'\s*/>','>','g') endif let before = matchstr(tag,'^.\{-\}\ze\r') let after = matchstr(tag,'\r\zs\%(.*\r\)\@!.\{-\}$') " middle isn't currently used let middle = matchstr(tag,'\r\zs.\{-\}\ze\r') return before.after.s:repeat("\",s:length(after)) endfunction function! s:htmlEn() let b:ragtag_omni = &l:omnifunc let b:ragtag_isk = &l:isk " : is for namespaced xml attributes setlocal omnifunc=htmlcomplete#CompleteTags isk+=: return "" endfunction function! s:htmlDis() if exists("b:ragtag_omni") let &l:omnifunc = b:ragtag_omni unlet b:ragtag_omni endif if exists("b:ragtag_isk") let &l:isk = b:ragtag_isk unlet b:ragtag_isk endif return "" endfunction function! s:subtype() let top = getline(1)."\n".getline(2) if (top =~ '' && &ft !~? 'html') || &ft =~? '^\%(xml\|xsd\|xslt\)$' return "xml" elseif top =~? '\' return 'xhtml' elseif top =~ '[^<]\' return "html" elseif &ft == "xhtml" || &ft == "eruby" return "xhtml" elseif exists("b:loaded_ragtag") return "html" else return "" endif endfunction function! s:closetagback() if s:subtype() == "html" return ">\" else return " />\\\" endif endfunction function! s:closetag() if s:subtype() == "html" return ">" else return " />" endif endfunction function! s:charset() let enc = &fileencoding if enc == "" let enc = &encoding endif if enc == "latin1" return "ISO-8859-1" elseif enc == "" return "US-ASCII" else return enc endif endfunction function! s:tagextras() if s:subtype() == "xml" return "" elseif @" == 'html' && s:subtype() == 'xhtml' let lang = "en" if exists("$LANG") && $LANG =~ '^..' let lang = strpart($LANG,0,2) endif return ' xmlns="http://www.w3.org/1999/xhtml" lang="'.lang.'" xml:lang="'.lang.'"' elseif @" == 'style' return ' type="text/css"' elseif @" == 'script' return ' type="text/javascript"' elseif @" == 'table' return ' cellspacing="0"' else return "" endif endfunction inoremap urlspace =getinput()=~?'\%([?&]\&\)[%a-z0-9._~+-]*=[%a-z0-9._~+-]*$'?'+':'%20' function! s:urltab(htmlesc) let line = s:getinput() let g:line = line if line =~ '[^ <>"'."'".']\@"'."'".']\@ ragtagBSUrl inoremap %0A imap