1071d4279SBram Moolenaar" Vim syntax file 2*6c391a74SBram Moolenaar" Language: MS-DOS batch file (with NT command extensions) 3071d4279SBram Moolenaar" Maintainer: Mike Williams <[email protected]> 4071d4279SBram Moolenaar" Filenames: *.bat 55c73622aSBram Moolenaar" Last Change: 6th September 2009 6071d4279SBram Moolenaar" Web Page: http://www.eandem.co.uk/mrw/vim 7071d4279SBram Moolenaar" 8071d4279SBram Moolenaar" Options Flags: 9071d4279SBram Moolenaar" dosbatch_cmdextversion - 1 = Windows NT, 2 = Windows 2000 [default] 10071d4279SBram Moolenaar" 11071d4279SBram Moolenaar 1289bcfda6SBram Moolenaar" quit when a syntax file was already loaded 1389bcfda6SBram Moolenaarif exists("b:current_syntax") 14071d4279SBram Moolenaar finish 15071d4279SBram Moolenaarendif 16071d4279SBram Moolenaar 17071d4279SBram Moolenaar" Set default highlighting to Win2k 18071d4279SBram Moolenaarif !exists("dosbatch_cmdextversion") 19071d4279SBram Moolenaar let dosbatch_cmdextversion = 2 20071d4279SBram Moolenaarendif 21071d4279SBram Moolenaar 22071d4279SBram Moolenaar" DOS bat files are case insensitive but case preserving! 23071d4279SBram Moolenaarsyn case ignore 24071d4279SBram Moolenaar 25071d4279SBram Moolenaarsyn keyword dosbatchTodo contained TODO 26071d4279SBram Moolenaar 27071d4279SBram Moolenaar" Dosbat keywords 28071d4279SBram Moolenaarsyn keyword dosbatchStatement goto call exit 29071d4279SBram Moolenaarsyn keyword dosbatchConditional if else 30071d4279SBram Moolenaarsyn keyword dosbatchRepeat for 31071d4279SBram Moolenaar 32071d4279SBram Moolenaar" Some operators - first lot are case sensitive! 33071d4279SBram Moolenaarsyn case match 34071d4279SBram Moolenaarsyn keyword dosbatchOperator EQU NEQ LSS LEQ GTR GEQ 35071d4279SBram Moolenaarsyn case ignore 365c73622aSBram Moolenaarsyn match dosbatchOperator "\s[-+\*/%!~]\s" 37071d4279SBram Moolenaarsyn match dosbatchOperator "=" 38071d4279SBram Moolenaarsyn match dosbatchOperator "[-+\*/%]=" 39071d4279SBram Moolenaarsyn match dosbatchOperator "\s\(&\||\|^\|<<\|>>\)=\=\s" 40071d4279SBram Moolenaarsyn match dosbatchIfOperator "if\s\+\(\(not\)\=\s\+\)\=\(exist\|defined\|errorlevel\|cmdextversion\)\="lc=2 41071d4279SBram Moolenaar 42071d4279SBram Moolenaar" String - using "'s is a convenience rather than a requirement outside of FOR 43864207deSBram Moolenaarsyn match dosbatchString "\"[^"]*\"" contains=dosbatchVariable,dosBatchArgument,dosbatchSpecialChar,@dosbatchNumber,@Spell 44864207deSBram Moolenaarsyn match dosbatchString "\<echo\([^)>|]\|\^\@<=[)>|]\)*"lc=4 contains=dosbatchVariable,dosbatchArgument,dosbatchSpecialChar,@dosbatchNumber,@Spell 45071d4279SBram Moolenaarsyn match dosbatchEchoOperator "\<echo\s\+\(on\|off\)\s*$"lc=4 46071d4279SBram Moolenaar 47071d4279SBram Moolenaar" For embedded commands 48071d4279SBram Moolenaarsyn match dosbatchCmd "(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator 49071d4279SBram Moolenaar 50071d4279SBram Moolenaar" Numbers - surround with ws to not include in dir and filenames 515c73622aSBram Moolenaarsyn match dosbatchInteger "[[:space:]=(/:,!~-]\d\+"lc=1 525c73622aSBram Moolenaarsyn match dosbatchHex "[[:space:]=(/:,!~-]0x\x\+"lc=1 535c73622aSBram Moolenaarsyn match dosbatchBinary "[[:space:]=(/:,!~-]0b[01]\+"lc=1 545c73622aSBram Moolenaarsyn match dosbatchOctal "[[:space:]=(/:,!~-]0\o\+"lc=1 55071d4279SBram Moolenaarsyn cluster dosbatchNumber contains=dosbatchInteger,dosbatchHex,dosbatchBinary,dosbatchOctal 56071d4279SBram Moolenaar 57071d4279SBram Moolenaar" Command line switches 58071d4279SBram Moolenaarsyn match dosbatchSwitch "/\(\a\+\|?\)" 59071d4279SBram Moolenaar 60071d4279SBram Moolenaar" Various special escaped char formats 61071d4279SBram Moolenaarsyn match dosbatchSpecialChar "\^[&|()<>^]" 62071d4279SBram Moolenaarsyn match dosbatchSpecialChar "\$[a-hl-npqstv_$+]" 63071d4279SBram Moolenaarsyn match dosbatchSpecialChar "%%" 64071d4279SBram Moolenaar 65071d4279SBram Moolenaar" Environment variables 66071d4279SBram Moolenaarsyn match dosbatchIdentifier contained "\s\h\w*\>" 67071d4279SBram Moolenaarsyn match dosbatchVariable "%\h\w*%" 68071d4279SBram Moolenaarsyn match dosbatchVariable "%\h\w*:\*\=[^=]*=[^%]*%" 695c73622aSBram Moolenaarsyn match dosbatchVariable "%\h\w*:\~[-]\=\d\+\(,[-]\=\d\+\)\=%" contains=dosbatchInteger 70071d4279SBram Moolenaarsyn match dosbatchVariable "!\h\w*!" 715c73622aSBram Moolenaarsyn match dosbatchVariable "!\h\w*:\*\=[^=]*=[^!]*!" 725c73622aSBram Moolenaarsyn match dosbatchVariable "!\h\w*:\~[-]\=\d\+\(,[-]\=\d\+\)\=!" contains=dosbatchInteger 73071d4279SBram Moolenaarsyn match dosbatchSet "\s\h\w*[+-]\==\{-1}" contains=dosbatchIdentifier,dosbatchOperator 74071d4279SBram Moolenaar 75071d4279SBram Moolenaar" Args to bat files and for loops, etc 76071d4279SBram Moolenaarsyn match dosbatchArgument "%\(\d\|\*\)" 775c73622aSBram Moolenaarsyn match dosbatchArgument "%[a-z]\>" 78071d4279SBram Moolenaarif dosbatch_cmdextversion == 1 79071d4279SBram Moolenaar syn match dosbatchArgument "%\~[fdpnxs]\+\(\($PATH:\)\=[a-z]\|\d\)\>" 80071d4279SBram Moolenaarelse 81071d4279SBram Moolenaar syn match dosbatchArgument "%\~[fdpnxsatz]\+\(\($PATH:\)\=[a-z]\|\d\)\>" 82071d4279SBram Moolenaarendif 83071d4279SBram Moolenaar 84071d4279SBram Moolenaar" Line labels 85071d4279SBram Moolenaarsyn match dosbatchLabel "^\s*:\s*\h\w*\>" 86071d4279SBram Moolenaarsyn match dosbatchLabel "\<\(goto\|call\)\s\+:\h\w*\>"lc=4 87071d4279SBram Moolenaarsyn match dosbatchLabel "\<goto\s\+\h\w*\>"lc=4 88071d4279SBram Moolenaarsyn match dosbatchLabel ":\h\w*\>" 89071d4279SBram Moolenaar 90071d4279SBram Moolenaar" Comments - usual rem but also two colons as first non-space is an idiom 91864207deSBram Moolenaarsyn match dosbatchComment "^rem\($\|\s.*$\)"lc=3 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell 925c73622aSBram Moolenaarsyn match dosbatchComment "^@rem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell 93864207deSBram Moolenaarsyn match dosbatchComment "\srem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell 945c73622aSBram Moolenaarsyn match dosbatchComment "\s@rem\($\|\s.*$\)"lc=5 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell 95864207deSBram Moolenaarsyn match dosbatchComment "\s*:\s*:.*$" contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell 96071d4279SBram Moolenaar 97071d4279SBram Moolenaar" Comments in ()'s - still to handle spaces before rem 98864207deSBram Moolenaarsyn match dosbatchComment "(rem\([^)]\|\^\@<=)\)*"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell 99071d4279SBram Moolenaar 100071d4279SBram Moolenaarsyn keyword dosbatchImplicit append assoc at attrib break cacls cd chcp chdir 101071d4279SBram Moolenaarsyn keyword dosbatchImplicit chkdsk chkntfs cls cmd color comp compact convert copy 102071d4279SBram Moolenaarsyn keyword dosbatchImplicit date del dir diskcomp diskcopy doskey echo endlocal 103071d4279SBram Moolenaarsyn keyword dosbatchImplicit erase fc find findstr format ftype 104071d4279SBram Moolenaarsyn keyword dosbatchImplicit graftabl help keyb label md mkdir mode more move 105071d4279SBram Moolenaarsyn keyword dosbatchImplicit path pause popd print prompt pushd rd recover rem 106071d4279SBram Moolenaarsyn keyword dosbatchImplicit ren rename replace restore rmdir set setlocal shift 107071d4279SBram Moolenaarsyn keyword dosbatchImplicit sort start subst time title tree type ver verify 108071d4279SBram Moolenaarsyn keyword dosbatchImplicit vol xcopy 109071d4279SBram Moolenaar 110071d4279SBram Moolenaar" Define the default highlighting. 11189bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 112071d4279SBram Moolenaar 113f37506f6SBram Moolenaarhi def link dosbatchTodo Todo 114071d4279SBram Moolenaar 115f37506f6SBram Moolenaarhi def link dosbatchStatement Statement 116f37506f6SBram Moolenaarhi def link dosbatchCommands dosbatchStatement 117f37506f6SBram Moolenaarhi def link dosbatchLabel Label 118f37506f6SBram Moolenaarhi def link dosbatchConditional Conditional 119f37506f6SBram Moolenaarhi def link dosbatchRepeat Repeat 120071d4279SBram Moolenaar 121f37506f6SBram Moolenaarhi def link dosbatchOperator Operator 122f37506f6SBram Moolenaarhi def link dosbatchEchoOperator dosbatchOperator 123f37506f6SBram Moolenaarhi def link dosbatchIfOperator dosbatchOperator 124071d4279SBram Moolenaar 125f37506f6SBram Moolenaarhi def link dosbatchArgument Identifier 126f37506f6SBram Moolenaarhi def link dosbatchIdentifier Identifier 127f37506f6SBram Moolenaarhi def link dosbatchVariable dosbatchIdentifier 128071d4279SBram Moolenaar 129f37506f6SBram Moolenaarhi def link dosbatchSpecialChar SpecialChar 130f37506f6SBram Moolenaarhi def link dosbatchString String 131f37506f6SBram Moolenaarhi def link dosbatchNumber Number 132f37506f6SBram Moolenaarhi def link dosbatchInteger dosbatchNumber 133f37506f6SBram Moolenaarhi def link dosbatchHex dosbatchNumber 134f37506f6SBram Moolenaarhi def link dosbatchBinary dosbatchNumber 135f37506f6SBram Moolenaarhi def link dosbatchOctal dosbatchNumber 136071d4279SBram Moolenaar 137f37506f6SBram Moolenaarhi def link dosbatchComment Comment 138f37506f6SBram Moolenaarhi def link dosbatchImplicit Function 139071d4279SBram Moolenaar 140f37506f6SBram Moolenaarhi def link dosbatchSwitch Special 141071d4279SBram Moolenaar 142f37506f6SBram Moolenaarhi def link dosbatchCmd PreProc 143071d4279SBram Moolenaar 144071d4279SBram Moolenaar 145071d4279SBram Moolenaarlet b:current_syntax = "dosbatch" 146071d4279SBram Moolenaar 147071d4279SBram Moolenaar" vim: ts=8 148