diff options
Diffstat (limited to '')
| -rw-r--r-- | indent/vb.vim | 82 | 
1 files changed, 82 insertions, 0 deletions
| diff --git a/indent/vb.vim b/indent/vb.vim new file mode 100644 index 00000000..853d8e38 --- /dev/null +++ b/indent/vb.vim @@ -0,0 +1,82 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1 +   +" Vim indent file +" Language:	VisualBasic (ft=vb) / Basic (ft=basic) / SaxBasic (ft=vb) +" Author:	Johannes Zellner <johannes@zellner.org> +" Last Change:	Fri, 18 Jun 2004 07:22:42 CEST +"		Small update 2010 Jul 28 by Maxim Kim + +if exists("b:did_indent") +    finish +endif +let b:did_indent = 1 + +setlocal autoindent +setlocal indentexpr=VbGetIndent(v:lnum) +setlocal indentkeys& +setlocal indentkeys+==~else,=~elseif,=~end,=~wend,=~case,=~next,=~select,=~loop,<:> + +let b:undo_indent = "set ai< indentexpr< indentkeys<" + +" Only define the function once. +if exists("*VbGetIndent") +    finish +endif + +fun! VbGetIndent(lnum) +    " labels and preprocessor get zero indent immediately +    let this_line = getline(a:lnum) +    let LABELS_OR_PREPROC = '^\s*\(\<\k\+\>:\s*$\|#.*\)' +    if this_line =~? LABELS_OR_PREPROC +	return 0 +    endif + +    " Find a non-blank line above the current line. +    " Skip over labels and preprocessor directives. +    let lnum = a:lnum +    while lnum > 0 +	let lnum = prevnonblank(lnum - 1) +	let previous_line = getline(lnum) +	if previous_line !~? LABELS_OR_PREPROC +	    break +	endif +    endwhile + +    " Hit the start of the file, use zero indent. +    if lnum == 0 +	return 0 +    endif + +    let ind = indent(lnum) + +    " Add +    if previous_line =~? '^\s*\<\(begin\|\%(\%(private\|public\|friend\)\s\+\)\=\%(function\|sub\|property\)\|select\|case\|default\|if\|else\|elseif\|do\|for\|while\|enum\|with\)\>' +	let ind = ind + shiftwidth() +    endif + +    " Subtract +    if this_line =~? '^\s*\<end\>\s\+\<select\>' +	if previous_line !~? '^\s*\<select\>' +	    let ind = ind - 2 * shiftwidth() +	else +	    " this case is for an empty 'select' -- 'end select' +	    " (w/o any case statements) like: +	    " +	    " select case readwrite +	    " end select +	    let ind = ind - shiftwidth() +	endif +    elseif this_line =~? '^\s*\<\(end\|else\|elseif\|until\|loop\|next\|wend\)\>' +	let ind = ind - shiftwidth() +    elseif this_line =~? '^\s*\<\(case\|default\)\>' +	if previous_line !~? '^\s*\<select\>' +	    let ind = ind - shiftwidth() +	endif +    endif + +    return ind +endfun + +" vim:sw=4 + +endif | 
