home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / unix / vim-6.2.tar.bz2 / vim-6.2.tar / vim62 / runtime / indent / vb.vim < prev    next >
Encoding:
Text File  |  2003-05-24  |  1.9 KB  |  74 lines

  1. " Vim indent file
  2. " Language:    VisualBasic (ft=vb) / Basic (ft=basic) / SaxBasic (ft=vb)
  3. " Author:    Johannes Zellner <johannes@zellner.org>
  4. " URL:        http://www.zellner.org/vim/indent/vb.vim
  5. " Last Change:    Sat, 24 May 2003 13:32:30 CEST
  6.  
  7. if exists("b:did_indent")
  8.     finish
  9. endif
  10. let b:did_indent = 1
  11.  
  12. setlocal indentexpr=VbGetIndent(v:lnum)
  13. setlocal indentkeys&
  14. setlocal indentkeys+==~else,=~elseif,=~end,=~wend,=~case,=~next,=~select,~=loop,<:>
  15.  
  16. " Only define the function once.
  17. if exists("*VbGetIndent")
  18.     finish
  19. endif
  20.  
  21. fun! VbGetIndent(lnum)
  22.     " labels and preprocessor get zero indent immediately
  23.     let this_line = getline(a:lnum)
  24.     let LABELS_OR_PREPROC = '^\s*\(\<\k\+\>:\s*$\|#.*\)'
  25.     if this_line =~? LABELS_OR_PREPROC
  26.     return 0
  27.     endif
  28.  
  29.     " Find a non-blank line above the current line.
  30.     " Skip over labels and preprocessor directives.
  31.     let lnum = a:lnum
  32.     while lnum > 0
  33.     let lnum = prevnonblank(lnum - 1)
  34.     let previous_line = getline(lnum)
  35.     if previous_line !~? LABELS_OR_PREPROC
  36.         break
  37.     endif
  38.     endwhile
  39.  
  40.     " Hit the start of the file, use zero indent.
  41.     if lnum == 0
  42.     return 0
  43.     endif
  44.  
  45.     let ind = indent(lnum)
  46.  
  47.     " Add
  48.     if previous_line =~? '^\s*\<\(begin\|\%(\%(private\|public\|friend\)\s\+\)\=\%(function\|sub\|property\)\|select\|case\|default\|if\>.\{-}\<then\>\s*$\|else\|elseif\|do\|for\|while\|enum\|with\)\>'
  49.     let ind = ind + &sw
  50.     endif
  51.  
  52.     " Subtract
  53.     if this_line =~? '^\s*\<end\>\s\+\<select\>'
  54.     if previous_line !~? '^\s*\<select\>'
  55.         let ind = ind - 2 * &sw
  56.     else
  57.         " this case is for an empty 'select' -- 'end select'
  58.         " (w/o any case statements) like:
  59.         "
  60.         " select case readwrite
  61.         " end select
  62.         let ind = ind - &sw
  63.     endif
  64.     elseif this_line =~? '^\s*\<\(end\|else\|until\|loop\|next\|wend\)\>'
  65.     let ind = ind - &sw
  66.     elseif this_line =~? '^\s*\<\(case\|default\)\>'
  67.     if previous_line !~? '^\s*\<select\>'
  68.         let ind = ind - &sw
  69.     endif
  70.     endif
  71.  
  72.     return ind
  73. endfun
  74.