" Vim indent file " Language: Jinja HTML template " Maintainer: Evan Hammer " Last Change: 2013 Jan 26 " Only load this indent file when no other was loaded. if exists("b:did_indent") finish endif " Use HTML formatting rules. setl indentkeys=o,O,,<>>,!^F runtime! indent/html.vim +setl nosmartindent let b:did_indent = 1 " Indent within the jinja tags " Made by Steve Losh if &l:indentexpr == '' if &l:cindent let &l:indentexpr = 'cindent(v:lnum)' else let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))' endif endif let b:html_indentexpr = &l:indentexpr let b:did_indent = 1 setlocal indentexpr=GetDjangoIndent() setlocal indentkeys=o,O,*,{,},o,O,!^F,<>> " Only define the function once. if exists("*GetDjangoIndent") finish endif function! GetDjangoIndent(...) if a:0 && a:1 == '.' let v:lnum = line('.') elseif a:0 && a:1 =~ '^\d' let v:lnum = a:1 endif let vcol = col('.') call cursor(v:lnum,vcol) exe "let ind = ".b:html_indentexpr let lnum = prevnonblank(v:lnum-1) let pnb = getline(lnum) let cur = getline(v:lnum) let tagstart = '.*' . '{%\s*' let tagend = '.*%}' . '.*' let blocktags = '\(block\|for\|if\|with\|autoescape\|comment\|filter\|spaceless\)' let midtags = '\(empty\|else\|elif\)' let pnb_blockstart = pnb =~# tagstart . blocktags . tagend let pnb_blockend = pnb =~# tagstart . 'end' . blocktags . tagend let pnb_blockmid = pnb =~# tagstart . midtags . tagend let cur_blockstart = cur =~# tagstart . blocktags . tagend let cur_blockend = cur =~# tagstart . 'end' . blocktags . tagend let cur_blockmid = cur =~# tagstart . midtags . tagend if pnb_blockstart && !pnb_blockend let ind = ind + &sw elseif pnb_blockmid && !pnb_blockend let ind = ind + &sw endif if cur_blockend && !cur_blockstart let ind = ind - &sw elseif cur_blockmid let ind = ind - &sw endif return ind endfunction