123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- if exists("b:did_indent")
- finish
- endif
- let b:did_indent = 1
- setlocal nolisp
- setlocal autoindent
- setlocal indentexpr=GoIndent(v:lnum)
- setlocal indentkeys+=<:>,0=},0=)
- if exists("*GoIndent")
- finish
- endif
- if exists('*shiftwidth')
- func s:sw()
- return shiftwidth()
- endfunc
- else
- func s:sw()
- return &sw
- endfunc
- endif
- function! GoIndent(lnum)
- let prevlnum = prevnonblank(a:lnum-1)
- if prevlnum == 0
-
- return 0
- endif
-
- let prevl = substitute(getline(prevlnum), '//.*$', '', '')
- let thisl = substitute(getline(a:lnum), '//.*$', '', '')
- let previ = indent(prevlnum)
- let ind = previ
- if prevl =~ '[({]\s*$'
-
- let ind += s:sw()
- endif
- if prevl =~# '^\s*\(case .*\|default\):$'
-
- let ind += s:sw()
- endif
-
- if thisl =~ '^\s*[)}]'
-
- let ind -= s:sw()
- endif
-
- " We want to outdent if it's part of a switch ("case foo:" or "default:
-
-
- if thisl =~# '^\s*\(case .*\|default\):$'
- let ind -= s:sw()
- endif
- return ind
- endfunction
|