# HG changeset patch # User Steve Losh # Date 1295899538 18000 # Node ID 9aba93d73e06ea4b04420ab914b56dcaebf4ed95 # Parent def83f37f73e7b6ee2f49dce3dab2f3f070d43e5 OH MY GOD INDENTATION diff -r def83f37f73e -r 9aba93d73e06 vim/.vimrc --- a/vim/.vimrc Mon Jan 24 12:02:34 2011 -0500 +++ b/vim/.vimrc Mon Jan 24 15:05:38 2011 -0500 @@ -459,5 +459,3 @@ else set nocursorline endif - -au Filetype html,xml,xsl,htmldjango set nosi indentexpr= autoindent shiftwidth=4 diff -r def83f37f73e -r 9aba93d73e06 vim/bundle/django-custom/indent/htmldjango.vim --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vim/bundle/django-custom/indent/htmldjango.vim Mon Jan 24 15:05:38 2011 -0500 @@ -0,0 +1,71 @@ +" Vim indent file +" Language: htmldjango +" Maintainer: Steve Losh +" +" Mostly based on indent/eruby.vim +" +" To use: save as ~/.vim/indent/htmldjango.vim + +if exists("b:did_indent") + finish +endif + +runtime! indent/html.vim +unlet! b:did_indent + +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 prev_non_blank_line = getline(lnum) + let current_line = getline(v:lnum) + + let tagstart = '^\s*' . '{%\s*' + let tagend = '.*%}' . '\s*$' + + let blocktags = '\(block\|for\|if\|with\|autoescape\|comment\|filter\|spaceless\)' + let midtags = '\(empty\|else\)' + + if prev_non_blank_line =~# tagstart . blocktags . tagend + let ind = ind + &sw + elseif prev_non_blank_line =~# tagstart . midtags . tagend + let ind = ind + &sw + endif + + if current_line =~# tagstart . 'end' . blocktags . '.*$' + let ind = ind - &sw + elseif current_line =~# tagstart . midtags . tagend + let ind = ind - &sw + endif + + return ind +endfunction + diff -r def83f37f73e -r 9aba93d73e06 vim/snippets/htmldjango.snippets --- a/vim/snippets/htmldjango.snippets Mon Jan 24 12:02:34 2011 -0500 +++ b/vim/snippets/htmldjango.snippets Mon Jan 24 15:05:38 2011 -0500 @@ -45,14 +45,12 @@ {% endfor %} snippet empty {% empty %} - ${1} snippet if {% if ${1} %} ${2} {% endif %} snippet else {% else %} - ${1} snippet ifchanged {% ifchanged %}${1}{% endifchanged %} snippet ifequal