K2LL33D SHELL

 Apache/2.4.7 (Ubuntu)
 Linux sman1baleendah 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64
 uid=33(www-data) gid=33(www-data) groups=33(www-data)
 safemode : OFF
 MySQL: ON | Perl: ON | cURL: OFF | WGet: ON
  >  / usr / share / vim / vim74 / indent /
server ip : 104.21.89.46

your ip : 108.162.241.112

H O M E


Filename/usr/share/vim/vim74/indent/sh.vim
Size3.95 kb
Permissionrw-r--r--
Ownerroot : root
Create time27-Apr-2025 09:56
Last modified03-Jan-2014 03:40
Last accessed06-Jul-2025 12:49
Actionsedit | rename | delete | download (gzip)
Viewtext | code | image
" Vim indent file
" Language: Shell Script
" Maintainer: Nikolai Weibull <[email protected]>
" Latest Revision: 2010-01-06

if exists("b:did_indent")
finish
endif
let b:did_indent = 1

setlocal indentexpr=GetShIndent()
setlocal indentkeys+=0=then,0=do,0=else,0=elif,0=fi,0=esac,0=done,),0=;;,0=;&
setlocal indentkeys+=0=fin,0=fil,0=fip,0=fir,0=fix
setlocal indentkeys-=:,0#
setlocal nosmartindent

if exists("*GetShIndent")
finish
endif

let s:cpo_save = &cpo
set cpo&vim

function s:buffer_shiftwidth()
return &shiftwidth
endfunction

let s:sh_indent_defaults = {
\ 'default': function('s:buffer_shiftwidth'),
\ 'continuation-line': function('s:buffer_shiftwidth'),
\ 'case-labels': function('s:buffer_shiftwidth'),
\ 'case-statements': function('s:buffer_shiftwidth'),
\ 'case-breaks': 0 }

function! s:indent_value(option)
let Value = exists('b:sh_indent_options')
\ && has_key(b:sh_indent_options, a:option) ?
\ b:sh_indent_options[a:option] :
\ s:sh_indent_defaults[a:option]
if type(Value) == type(function('type'))
return Value()
endif
return Value
endfunction

function! GetShIndent()
let lnum = prevnonblank(v:lnum - 1)
if lnum == 0
return 0
endif

let pnum = prevnonblank(lnum - 1)

let ind = indent(lnum)
let line = getline(lnum)
if line =~ '^\s*\%(if\|then\|do\|else\|elif\|case\|while\|until\|for\|select\)\>'
if line !~ '\<\%(fi\|esac\|done\)\>\s*\%(#.*\)\=$'
let ind += s:indent_value('default')
endif
elseif s:is_case_label(line, pnum)
if !s:is_case_ended(line)
let ind += s:indent_value('case-statements')
endif
elseif line =~ '^\s*\<\k\+\>\s*()\s*{' || line =~ '^\s*{'
if line !~ '}\s*\%(#.*\)\=$'
let ind += s:indent_value('default')
endif
elseif s:is_continuation_line(line)
if pnum == 0 || !s:is_continuation_line(getline(pnum))
let ind += s:indent_value('continuation-line')
endif
elseif pnum != 0 && s:is_continuation_line(getline(pnum))
let ind = indent(s:find_continued_lnum(pnum))
endif

let pine = line
let line = getline(v:lnum)
if line =~ '^\s*\%(then\|do\|else\|elif\|fi\|done\)\>' || line =~ '^\s*}'
let ind -= s:indent_value('default')
elseif line =~ '^\s*esac\>'
let ind -= (s:is_case_label(pine, lnum) && s:is_case_ended(pine) ?
\ 0 : s:indent_value('case-statements')) +
\ s:indent_value('case-labels')
if s:is_case_break(pine)
let ind += s:indent_value('case-breaks')
endif
elseif s:is_case_label(line, lnum)
if s:is_case(pine)
let ind = indent(lnum) + s:indent_value('case-labels')
else
let ind -= s:indent_value('case-statements') - s:indent_value('case-breaks')
endif
elseif s:is_case_break(line)
let ind -= s:indent_value('case-breaks')
endif

return ind
endfunction

function! s:is_continuation_line(line)
return a:line =~ '\%(\%(^\|[^\\]\)\\\|&&\|||\)$'
endfunction

function! s:find_continued_lnum(lnum)
let i = a:lnum
while i > 1 && s:is_continuation_line(getline(i - 1))
let i -= 1
endwhile
return i
endfunction

function! s:is_case_label(line, pnum)
if a:line !~ '^\s*(\=.*)'
return 0
endif

if a:pnum > 0
let pine = getline(a:pnum)
if !(s:is_case(pine) || s:is_case_ended(pine))
return 0
endif
endif

let suffix = substitute(a:line, '^\s*(\=', "", "")
let nesting = 0
let i = 0
let n = strlen(suffix)
while i < n
let c = suffix[i]
let i += 1
if c == '\\'
let i += 1
elseif c == '('
let nesting += 1
elseif c == ')'
if nesting == 0
return 1
endif
let nesting -= 1
endif
endwhile
return 0
endfunction

function! s:is_case(line)
return a:line =~ '^\s*case\>'
endfunction

function! s:is_case_break(line)
return a:line =~ '^\s*;[;&]'
endfunction

function! s:is_case_ended(line)
return s:is_case_break(a:line) || a:line =~ ';[;&]\s*\%(#.*\)\=$'
endfunction

let &cpo = s:cpo_save
unlet s:cpo_save