X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/dc1fdffa795bce2425025e9d29d14a321c5424dd..c1bd583a7f217958d2c79621af15cdde13607f58:/indent/python.vim diff --git a/indent/python.vim b/indent/python.vim index 69ce187..4dcdf8b 100644 --- a/indent/python.vim +++ b/indent/python.vim @@ -3,7 +3,6 @@ " Maintainer: Hynek Schlawack " Prev Maintainer: Eric Mc Sween (address invalid) " Original Author: David Bustos (address invalid) -" Last Change: 2012-06-21 " License: Public Domain " Only load this indent file when no other was loaded. @@ -102,7 +101,6 @@ function! s:BlockStarter(lnum, block_start_re) endfunction function! GetPythonPEPIndent(lnum) - " First line has indent 0 if a:lnum == 1 return 0 @@ -129,8 +127,8 @@ function! GetPythonPEPIndent(lnum) let thisline = getline(a:lnum) let thisindent = indent(a:lnum) - " If the line starts with 'elif' or 'else', line up with 'if' or 'elif' - if thisline =~ '^\s*\(elif\|else\)\>' + " If the line starts with 'elif', line up with 'if' or 'elif' + if thisline =~ '^\s*elif\>' let bslnum = s:BlockStarter(a:lnum, '^\s*\(if\|elif\)\>') if bslnum > 0 return indent(bslnum) @@ -139,8 +137,8 @@ function! GetPythonPEPIndent(lnum) endif endif - " If the line starts with 'except' or 'finally', line up with 'try' - " or 'except' + " If the line starts with 'except', or 'finally', line up with 'try' + " or 'except'. if thisline =~ '^\s*\(except\|finally\)\>' let bslnum = s:BlockStarter(a:lnum, '^\s*\(try\|except\)\>') if bslnum > 0 @@ -150,6 +148,18 @@ function! GetPythonPEPIndent(lnum) endif endif + " If the line starts with 'else', line it up with 'try', 'except', 'for', + " 'if', or 'elif'. + if thisline =~ '^\s*else\>' + :echom thisline + let bslnum = s:BlockStarter(a:lnum, '^\s*\(try\|except\|if\|elif\|for\)\>') + if bslnum > 0 + return indent(bslnum) + else + return -1 + endif + endif + " Examine previous line let plnum = a:lnum - 1 let pline = getline(plnum) @@ -170,12 +180,18 @@ function! GetPythonPEPIndent(lnum) return maybe_indent + &sw else " control structure not found - return maybe_indent + return maybe_indent endif endif " If the previous line ended with a colon and is not a comment, indent " relative to statement start. + let pline = substitute(pline, '\\\\', '', 'g') + if v:version > 703 || (v:version == 703 && has('patch1037')) + let pline = substitute(pline, '".\{-}\\\@1