diff options
author | Bram Moolenaar <Bram@vim.org> | 2004-06-13 20:20:40 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2004-06-13 20:20:40 +0000 |
commit | 071d4279d6ab81b7187b48f3a0fc61e587b6db6c (patch) | |
tree | 221cbe3c40e043163c06f61c52a7ba2eb41e12ce /runtime/indent/sh.vim | |
parent | b4210b3bc14e2918f153a7307530fbe6eba659e1 (diff) |
updated for version 7.0001v7.0001
Diffstat (limited to 'runtime/indent/sh.vim')
-rw-r--r-- | runtime/indent/sh.vim | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim new file mode 100644 index 0000000000..880ad12ce7 --- /dev/null +++ b/runtime/indent/sh.vim @@ -0,0 +1,58 @@ +" Vim indent file +" Language: Shell Script +" Maintainer: Nikolai Weibull <source@pcppopper.org> +" URL: http://www.pcppopper.org/vim/indent/pcp/sh/ +" Latest Revision: 2004-04-25 +" arch-tag: 431c7fc1-12a6-4d71-9636-1498ef56b038 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif + +let b:did_indent = 1 + +setlocal indentexpr=GetShIndent() +setlocal indentkeys+==then,=do,=else,=elif,=esac,=fi,=fin,=fil,=done +setlocal indentkeys-=:,0# + +" Only define the function once. +if exists("*GetShIndent") + finish +endif + +set cpoptions-=C + +function GetShIndent() + " Find a non-blank line above the current line. + let lnum = prevnonblank(v:lnum - 1) + + " Hit the start of the file, use zero indent. + if lnum == 0 + return 0 + endif + + " Add a 'shiftwidth' after if, while, else, case, until, for, function() + " Skip if the line also contains the closure for the above + let ind = indent(lnum) + let line = getline(lnum) + if line =~ '^\s*\(if\|then\|do\|else\|elif\|case\|while\|until\|for\)\>' + \ || line =~ '^\s*\<\h\w*\>\s*()\s*{' + \ || line =~ '^\s*{' + if line !~ '\(esac\|fi\|done\)\>\s*$' && line !~ '}\s*$' + let ind = ind + &sw + endif + endif + + " Subtract a 'shiftwidth' on a then, do, else, esac, fi, done + " Retain the indentation level if line matches fin (for find) + let line = getline(v:lnum) + if (line =~ '^\s*\(then\|do\|else\|elif\|esac\|fi\|done\)\>' || line =~ '^\s*}') + \ && line !~ '^\s*fi[ln]\>' + let ind = ind - &sw + endif + + return ind +endfunction + +" vim: set sts=2 sw=2: |