r1124 - in /trunk/packages/vim-scripts: debian/changelog debian/vim-scripts.status indent/ indent/python.vim
jamessan at users.alioth.debian.org
jamessan at users.alioth.debian.org
Wed Dec 12 14:26:06 UTC 2007
Author: jamessan
Date: Wed Dec 12 14:26:06 2007
New Revision: 1124
URL: http://svn.debian.org/wsvn/pkg-vim/?sc=1&rev=1124
Log:
Add python-indent script
Added:
trunk/packages/vim-scripts/indent/
trunk/packages/vim-scripts/indent/python.vim
Modified:
trunk/packages/vim-scripts/debian/changelog
trunk/packages/vim-scripts/debian/vim-scripts.status
Modified: trunk/packages/vim-scripts/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim-scripts/debian/changelog?rev=1124&op=diff
==============================================================================
--- trunk/packages/vim-scripts/debian/changelog (original)
+++ trunk/packages/vim-scripts/debian/changelog Wed Dec 12 14:26:06 2007
@@ -3,14 +3,14 @@
* Updated addons:
- Bufexplorer (Closes: #455883) and NERD Commenter.
* New addons:
- - debPlugin (Closes: #442865)
+ - debPlugin (Closes: #442865) and python-indent
* debian/control:
- Remove vim from Build-Depends-Indep since NERD Commenter now ships its
documentation.
* debian/rules:
- Stop generating NERD Commenter's documentation at build time.
- -- James Vega <jamessan at debian.org> Wed, 12 Dec 2007 09:04:45 -0500
+ -- James Vega <jamessan at debian.org> Wed, 12 Dec 2007 09:25:12 -0500
vim-scripts (7.1.4) unstable; urgency=low
Modified: trunk/packages/vim-scripts/debian/vim-scripts.status
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim-scripts/debian/vim-scripts.status?rev=1124&op=diff
==============================================================================
--- trunk/packages/vim-scripts/debian/vim-scripts.status (original)
+++ trunk/packages/vim-scripts/debian/vim-scripts.status Wed Dec 12 14:26:06 2007
@@ -356,6 +356,17 @@
disabledby: let loaded_debPlugin = 1
version: 1.2
+script_name: indent/python.vim
+addon: python-indent
+description: alternative python indent (a la PEP 8)
+script_url: http://www.vim.org/scripts/script.php?script_id=974
+author: Eric Mc Sween
+author_url: http://www.vim.org/account/profile.php?user_id=2913
+email: em at tomcom.de
+license: no license
+disabledby: let loaded_python_indent = 1
+version: 0.3
+
--
Licenses referenced above
Added: trunk/packages/vim-scripts/indent/python.vim
URL: http://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim-scripts/indent/python.vim?rev=1124&op=file
==============================================================================
--- trunk/packages/vim-scripts/indent/python.vim (added)
+++ trunk/packages/vim-scripts/indent/python.vim Wed Dec 12 14:26:06 2007
@@ -1,0 +1,196 @@
+" Python indent file
+" Language: Python
+" Maintainer: Eric Mc Sween <em at tomcom.de>
+" Original Author: David Bustos <bustos at caltech.edu>
+" Last Change: 2004 Jun 07
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal expandtab
+setlocal nolisp
+setlocal autoindent
+setlocal indentexpr=GetPythonIndent(v:lnum)
+setlocal indentkeys=!^F,o,O,<:>,0),0],0},=elif,=except
+
+let s:maxoff = 50
+
+" Find backwards the closest open parenthesis/bracket/brace.
+function! s:SearchParensPair()
+ let line = line('.')
+ let col = col('.')
+
+ " Skip strings and comments and don't look too far
+ let skip = "line('.') < " . (line - s:maxoff) . " ? dummy :" .
+ \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? ' .
+ \ '"string\\|comment"'
+
+ " Search for parentheses
+ call cursor(line, col)
+ let parlnum = searchpair('(', '', ')', 'bW', skip)
+ let parcol = col('.')
+
+ " Search for brackets
+ call cursor(line, col)
+ let par2lnum = searchpair('\[', '', '\]', 'bW', skip)
+ let par2col = col('.')
+
+ " Search for braces
+ call cursor(line, col)
+ let par3lnum = searchpair('{', '', '}', 'bW', skip)
+ let par3col = col('.')
+
+ " Get the closest match
+ if par2lnum > parlnum || (par2lnum == parlnum && par2col > parcol)
+ let parlnum = par2lnum
+ let parcol = par2col
+ endif
+ if par3lnum > parlnum || (par3lnum == parlnum && par3col > parcol)
+ let parlnum = par3lnum
+ let parcol = par3col
+ endif
+
+ " Put the cursor on the match
+ if parlnum > 0
+ call cursor(parlnum, parcol)
+ endif
+ return parlnum
+endfunction
+
+" Find the start of a multi-line statement
+function! s:StatementStart(lnum)
+ let lnum = a:lnum
+ while 1
+ if getline(lnum - 1) =~ '\\$'
+ let lnum = lnum - 1
+ else
+ call cursor(lnum, 1)
+ let maybe_lnum = s:SearchParensPair()
+ if maybe_lnum < 1
+ return lnum
+ else
+ let lnum = maybe_lnum
+ endif
+ endif
+ endwhile
+endfunction
+
+" Find the block starter that matches the current line
+function! s:BlockStarter(lnum, block_start_re)
+ let lnum = a:lnum
+ let maxindent = 10000 " whatever
+ while lnum > 1
+ let lnum = prevnonblank(lnum - 1)
+ if indent(lnum) < maxindent
+ if getline(lnum) =~ a:block_start_re
+ return lnum
+ else
+ let maxindent = indent(lnum)
+ " It's not worth going further if we reached the top level
+ if maxindent == 0
+ return -1
+ endif
+ endif
+ endif
+ endwhile
+ return -1
+endfunction
+
+function! GetPythonIndent(lnum)
+
+ " First line has indent 0
+ if a:lnum == 1
+ return 0
+ endif
+
+ " If we can find an open parenthesis/bracket/brace, line up with it.
+ call cursor(a:lnum, 1)
+ let parlnum = s:SearchParensPair()
+ if parlnum > 0
+ let parcol = col('.')
+ let closing_paren = match(getline(a:lnum), '^\s*[])}]') != -1
+ if match(getline(parlnum), '[([{]\s*$', parcol - 1) != -1
+ if closing_paren
+ return indent(parlnum)
+ else
+ return indent(parlnum) + &shiftwidth
+ endif
+ else
+ if closing_paren
+ return parcol - 1
+ else
+ return parcol
+ endif
+ endif
+ endif
+
+ " Examine this line
+ 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\)\>'
+ let bslnum = s:BlockStarter(a:lnum, '^\s*\(if\|elif\)\>')
+ if bslnum > 0
+ return indent(bslnum)
+ else
+ return -1
+ endif
+ endif
+
+ " 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
+ return indent(bslnum)
+ else
+ return -1
+ endif
+ endif
+
+ " Examine previous line
+ let plnum = a:lnum - 1
+ let pline = getline(plnum)
+ let sslnum = s:StatementStart(plnum)
+
+ " If the previous line is blank, keep the same indentation
+ if pline =~ '^\s*$'
+ return -1
+ endif
+
+ " If this line is explicitly joined, try to find an indentation that looks
+ " good.
+ if pline =~ '\\$'
+ let compound_statement = '^\s*\(if\|while\|for\s.*\sin\|except\)\s*'
+ let maybe_indent = matchend(getline(sslnum), compound_statement)
+ if maybe_indent != -1
+ return maybe_indent
+ else
+ return indent(sslnum) + &sw * 2
+ endif
+ endif
+
+ " If the previous line ended with a colon, indent relative to
+ " statement start.
+ if pline =~ ':\s*$'
+ return indent(sslnum) + &sw
+ endif
+
+ " If the previous line was a stop-execution statement or a pass
+ if getline(sslnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\)\>'
+ " See if the user has already dedented
+ if indent(a:lnum) > indent(sslnum) - &sw
+ " If not, recommend one dedent
+ return indent(sslnum) - &sw
+ endif
+ " Otherwise, trust the user
+ return -1
+ endif
+
+ " In all other cases, line up with the start of the previous statement.
+ return indent(sslnum)
+endfunction
More information about the pkg-vim-maintainers
mailing list