120aac6c1SBram Moolenaar" Vim indent file 220aac6c1SBram Moolenaar" Language: MSDOS batch file (with NT command extensions) 320aac6c1SBram Moolenaar" Maintainer: Ken Takata 420aac6c1SBram Moolenaar" URL: https://github.com/k-takata/vim-dosbatch-indent 5*079ba76aSBram Moolenaar" Last Change: 2021-10-18 620aac6c1SBram Moolenaar" Filenames: *.bat 720aac6c1SBram Moolenaar" License: VIM License 820aac6c1SBram Moolenaar 920aac6c1SBram Moolenaarif exists("b:did_indent") 1020aac6c1SBram Moolenaar finish 1120aac6c1SBram Moolenaarendif 1220aac6c1SBram Moolenaarlet b:did_indent = 1 1320aac6c1SBram Moolenaar 1420aac6c1SBram Moolenaarsetlocal nosmartindent 1520aac6c1SBram Moolenaarsetlocal noautoindent 1620aac6c1SBram Moolenaarsetlocal indentexpr=GetDosBatchIndent(v:lnum) 1720aac6c1SBram Moolenaarsetlocal indentkeys=!^F,o,O 1820aac6c1SBram Moolenaarsetlocal indentkeys+=0=) 1920aac6c1SBram Moolenaar 20*079ba76aSBram Moolenaarlet b:undo_indent = "setl ai< inde< indk< si<" 21*079ba76aSBram Moolenaar 2220aac6c1SBram Moolenaarif exists("*GetDosBatchIndent") 2320aac6c1SBram Moolenaar finish 2420aac6c1SBram Moolenaarendif 2520aac6c1SBram Moolenaar 2620aac6c1SBram Moolenaarlet s:cpo_save = &cpo 2720aac6c1SBram Moolenaarset cpo&vim 2820aac6c1SBram Moolenaar 2920aac6c1SBram Moolenaarfunction! GetDosBatchIndent(lnum) 3020aac6c1SBram Moolenaar let l:prevlnum = prevnonblank(a:lnum-1) 3120aac6c1SBram Moolenaar if l:prevlnum == 0 3220aac6c1SBram Moolenaar " top of file 3320aac6c1SBram Moolenaar return 0 3420aac6c1SBram Moolenaar endif 3520aac6c1SBram Moolenaar 3620aac6c1SBram Moolenaar " grab the previous and current line, stripping comments. 3720aac6c1SBram Moolenaar let l:prevl = substitute(getline(l:prevlnum), '\c^\s*\%(@\s*\)\?rem\>.*$', '', '') 3820aac6c1SBram Moolenaar let l:thisl = getline(a:lnum) 3920aac6c1SBram Moolenaar let l:previ = indent(l:prevlnum) 4020aac6c1SBram Moolenaar 4120aac6c1SBram Moolenaar let l:ind = l:previ 4220aac6c1SBram Moolenaar 4320aac6c1SBram Moolenaar if l:prevl =~? '^\s*@\=if\>.*(\s*$' || 4420aac6c1SBram Moolenaar \ l:prevl =~? '\<do\>\s*(\s*$' || 4520aac6c1SBram Moolenaar \ l:prevl =~? '\<else\>\s*\%(if\>.*\)\?(\s*$' || 4620aac6c1SBram Moolenaar \ l:prevl =~? '^.*\(&&\|||\)\s*(\s*$' 4720aac6c1SBram Moolenaar " previous line opened a block 4820aac6c1SBram Moolenaar let l:ind += shiftwidth() 4920aac6c1SBram Moolenaar endif 5020aac6c1SBram Moolenaar if l:thisl =~ '^\s*)' 5120aac6c1SBram Moolenaar " this line closed a block 5220aac6c1SBram Moolenaar let l:ind -= shiftwidth() 5320aac6c1SBram Moolenaar endif 5420aac6c1SBram Moolenaar 5520aac6c1SBram Moolenaar return l:ind 5620aac6c1SBram Moolenaarendfunction 5720aac6c1SBram Moolenaar 5820aac6c1SBram Moolenaarlet &cpo = s:cpo_save 5920aac6c1SBram Moolenaarunlet s:cpo_save 6020aac6c1SBram Moolenaar 6120aac6c1SBram Moolenaar" vim: ts=8 sw=2 sts=2 62