xref: /vim-8.2.3635/runtime/indent/dosbatch.vim (revision 079ba76a)
1" Vim indent file
2" Language:	MSDOS batch file (with NT command extensions)
3" Maintainer:	Ken Takata
4" URL:		https://github.com/k-takata/vim-dosbatch-indent
5" Last Change:	2021-10-18
6" Filenames:	*.bat
7" License:	VIM License
8
9if exists("b:did_indent")
10  finish
11endif
12let b:did_indent = 1
13
14setlocal nosmartindent
15setlocal noautoindent
16setlocal indentexpr=GetDosBatchIndent(v:lnum)
17setlocal indentkeys=!^F,o,O
18setlocal indentkeys+=0=)
19
20let b:undo_indent = "setl ai< inde< indk< si<"
21
22if exists("*GetDosBatchIndent")
23  finish
24endif
25
26let s:cpo_save = &cpo
27set cpo&vim
28
29function! GetDosBatchIndent(lnum)
30  let l:prevlnum = prevnonblank(a:lnum-1)
31  if l:prevlnum == 0
32    " top of file
33    return 0
34  endif
35
36  " grab the previous and current line, stripping comments.
37  let l:prevl = substitute(getline(l:prevlnum), '\c^\s*\%(@\s*\)\?rem\>.*$', '', '')
38  let l:thisl = getline(a:lnum)
39  let l:previ = indent(l:prevlnum)
40
41  let l:ind = l:previ
42
43  if l:prevl =~? '^\s*@\=if\>.*(\s*$' ||
44        \ l:prevl =~? '\<do\>\s*(\s*$' ||
45        \ l:prevl =~? '\<else\>\s*\%(if\>.*\)\?(\s*$' ||
46        \ l:prevl =~? '^.*\(&&\|||\)\s*(\s*$'
47    " previous line opened a block
48    let l:ind += shiftwidth()
49  endif
50  if l:thisl =~ '^\s*)'
51    " this line closed a block
52    let l:ind -= shiftwidth()
53  endif
54
55  return l:ind
56endfunction
57
58let &cpo = s:cpo_save
59unlet s:cpo_save
60
61" vim: ts=8 sw=2 sts=2
62