1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: 4Dos batch file 3071d4279SBram Moolenaar" Maintainer: John Leo Spetz <[email protected]> 4071d4279SBram Moolenaar" Last Change: 2001 May 09 5071d4279SBram Moolenaar 6071d4279SBram Moolenaar"//Issues to resolve: 7071d4279SBram Moolenaar"//- Boolean operators surrounded by period are recognized but the 8071d4279SBram Moolenaar"// periods are not highlighted. The only way to do that would 9071d4279SBram Moolenaar"// be separate synmatches for each possibility otherwise a more 10071d4279SBram Moolenaar"// general \.\i\+\. will highlight anything delimited by dots. 11071d4279SBram Moolenaar"//- After unary operators like "defined" can assume token type. 12071d4279SBram Moolenaar"// Should there be more of these? 13071d4279SBram Moolenaar 1489bcfda6SBram Moolenaar" quit when a syntax file was already loaded 1589bcfda6SBram Moolenaarif exists("b:current_syntax") 16071d4279SBram Moolenaar finish 17071d4279SBram Moolenaarendif 18071d4279SBram Moolenaar 19071d4279SBram Moolenaarsyn case ignore 20071d4279SBram Moolenaar 21071d4279SBram Moolenaarsyn keyword btmStatement call off 22071d4279SBram Moolenaarsyn keyword btmConditional if iff endiff then else elseiff not errorlevel 23071d4279SBram Moolenaarsyn keyword btmConditional gt lt eq ne ge le 24071d4279SBram Moolenaarsyn match btmConditional transparent "\.\i\+\." contains=btmDotBoolOp 25071d4279SBram Moolenaarsyn keyword btmDotBoolOp contained and or xor 26071d4279SBram Moolenaarsyn match btmConditional "==" 27071d4279SBram Moolenaarsyn match btmConditional "!=" 28071d4279SBram Moolenaarsyn keyword btmConditional defined errorlevel exist isalias 29071d4279SBram Moolenaarsyn keyword btmConditional isdir direxist isinternal islabel 30071d4279SBram Moolenaarsyn keyword btmRepeat for in do enddo 31071d4279SBram Moolenaar 32071d4279SBram Moolenaarsyn keyword btmTodo contained TODO 33071d4279SBram Moolenaar 34071d4279SBram Moolenaar" String 35071d4279SBram Moolenaarsyn cluster btmVars contains=btmVariable,btmArgument,btmBIFMatch 36071d4279SBram Moolenaarsyn region btmString start=+"+ end=+"+ contains=@btmVars 37071d4279SBram Moolenaarsyn match btmNumber "\<\d\+\>" 38071d4279SBram Moolenaar 39071d4279SBram Moolenaar"syn match btmIdentifier "\<\h\w*\>" 40071d4279SBram Moolenaar 41071d4279SBram Moolenaar" If you don't like tabs 42071d4279SBram Moolenaar"syn match btmShowTab "\t" 43071d4279SBram Moolenaar"syn match btmShowTabc "\t" 44071d4279SBram Moolenaar"syn match btmComment "^\ *rem.*$" contains=btmTodo,btmShowTabc 45071d4279SBram Moolenaar 46071d4279SBram Moolenaar" Some people use this as a comment line 47071d4279SBram Moolenaar" In fact this is a Label 48071d4279SBram Moolenaar"syn match btmComment "^\ *:\ \+.*$" contains=btmTodo 49071d4279SBram Moolenaar 50071d4279SBram Moolenaarsyn match btmComment "^\ *rem.*$" contains=btmTodo 51071d4279SBram Moolenaarsyn match btmComment "^\ *::.*$" contains=btmTodo 52071d4279SBram Moolenaar 53071d4279SBram Moolenaarsyn match btmLabelMark "^\ *:[0-9a-zA-Z_\-]\+\>" 54071d4279SBram Moolenaarsyn match btmLabelMark "goto [0-9a-zA-Z_\-]\+\>"lc=5 55071d4279SBram Moolenaarsyn match btmLabelMark "gosub [0-9a-zA-Z_\-]\+\>"lc=6 56071d4279SBram Moolenaar 57071d4279SBram Moolenaar" syn match btmCmdDivider ">[>&][>&]\=" 58071d4279SBram Moolenaarsyn match btmCmdDivider ">[>&]*" 59071d4279SBram Moolenaarsyn match btmCmdDivider ">>&>" 60071d4279SBram Moolenaarsyn match btmCmdDivider "|&\=" 61071d4279SBram Moolenaarsyn match btmCmdDivider "%+" 62071d4279SBram Moolenaarsyn match btmCmdDivider "\^" 63071d4279SBram Moolenaar 64071d4279SBram Moolenaarsyn region btmEcho start="echo" skip="echo" matchgroup=btmCmdDivider end="%+" end="$" end="|&\=" end="\^" end=">[>&]*" contains=@btmEchos oneline 65071d4279SBram Moolenaarsyn cluster btmEchos contains=@btmVars,btmEchoCommand,btmEchoParam 66071d4279SBram Moolenaarsyn keyword btmEchoCommand contained echo echoerr echos echoserr 67071d4279SBram Moolenaarsyn keyword btmEchoParam contained on off 68071d4279SBram Moolenaar 69071d4279SBram Moolenaar" this is also a valid Label. I don't use it. 70071d4279SBram Moolenaar"syn match btmLabelMark "^\ *:\ \+[0-9a-zA-Z_\-]\+\>" 71071d4279SBram Moolenaar 72071d4279SBram Moolenaar" //Environment variable can be expanded using notation %var in 4DOS 73071d4279SBram Moolenaarsyn match btmVariable "%[0-9a-z_\-]\+" contains=@btmSpecialVars 74071d4279SBram Moolenaar" //Environment variable can be expanded using notation %var% 75071d4279SBram Moolenaarsyn match btmVariable "%[0-9a-z_\-]*%" contains=@btmSpecialVars 76071d4279SBram Moolenaar" //The following are special variable in 4DOS 77071d4279SBram Moolenaarsyn match btmVariable "%[=#]" contains=@btmSpecialVars 78071d4279SBram Moolenaarsyn match btmVariable "%??\=" contains=@btmSpecialVars 79071d4279SBram Moolenaar" //Environment variable can be expanded using notation %[var] in 4DOS 80071d4279SBram Moolenaarsyn match btmVariable "%\[[0-9a-z_\-]*\]" 81071d4279SBram Moolenaar" //After some keywords next word should be an environment variable 82071d4279SBram Moolenaarsyn match btmVariable "defined\s\i\+"lc=8 83071d4279SBram Moolenaarsyn match btmVariable "set\s\i\+"lc=4 84071d4279SBram Moolenaar" //Parameters to batchfiles take the format %<digit> 85071d4279SBram Moolenaarsyn match btmArgument "%\d\>" 86071d4279SBram Moolenaar" //4DOS allows format %<digit>& meaning batchfile parameters digit and up 87071d4279SBram Moolenaarsyn match btmArgument "%\d\>&" 88071d4279SBram Moolenaar" //Variable used by FOR loops sometimes use %%<letter> in batchfiles 89071d4279SBram Moolenaarsyn match btmArgument "%%\a\>" 90071d4279SBram Moolenaar 91071d4279SBram Moolenaar" //Show 4DOS built-in functions specially 92071d4279SBram Moolenaarsyn match btmBIFMatch "%@\w\+\["he=e-1 contains=btmBuiltInFunc 93071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained alias ascii attrib cdrom 94071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained char clip comma convert 95071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained date day dec descript 96071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained device diskfree disktotal 97071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained diskused dosmem dow dowi 98071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained doy ems eval exec execstr 99071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained expand ext extended 100071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained fileage fileclose filedate 101071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained filename fileopen fileread 102071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained files fileseek fileseekl 103071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained filesize filetime filewrite 104071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained filewriteb findclose 105071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained findfirst findnext format 106071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained full if inc index insert 107071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained instr int label left len 108071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained lfn line lines lower lpt 109071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained makeage makedate maketime 110071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained master month name numeric 111071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained path random readscr ready 112071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained remote removable repeat 113071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained replace right search 114071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained select sfn strip substr 115071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained time timer trim truename 116071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained unique upper wild word 117071d4279SBram Moolenaarsyn keyword btmBuiltInFunc contained words xms year 118071d4279SBram Moolenaar 119071d4279SBram Moolenaarsyn cluster btmSpecialVars contains=btmBuiltInVar,btmSpecialVar 120071d4279SBram Moolenaar 121071d4279SBram Moolenaar" //Show specialized variables specially 122071d4279SBram Moolenaar" syn match btmSpecialVar contained "+" 123071d4279SBram Moolenaarsyn match btmSpecialVar contained "=" 124071d4279SBram Moolenaarsyn match btmSpecialVar contained "#" 125071d4279SBram Moolenaarsyn match btmSpecialVar contained "??\=" 126071d4279SBram Moolenaarsyn keyword btmSpecialVar contained cmdline colordir comspec 127071d4279SBram Moolenaarsyn keyword btmSpecialVar contained copycmd dircmd temp temp4dos 128071d4279SBram Moolenaarsyn keyword btmSpecialVar contained filecompletion path prompt 129071d4279SBram Moolenaar 130071d4279SBram Moolenaar" //Show 4DOS built-in variables specially specially 131071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _4ver _alias _ansi 132071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _apbatt _aplife _apmac _batch 133071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _batchline _batchname _bg 134071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _boot _ci _cmdproc _co 135071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _codepage _column _columns 136071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _country _cpu _cwd _cwds _cwp 137071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _cwps _date _day _disk _dname 138071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _dos _dosver _dow _dowi _doy 139071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _dpmi _dv _env _fg _hlogfile 140071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _hour _kbhit _kstack _lastdisk 141071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _logfile _minute _monitor 142071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _month _mouse _ndp _row _rows 143071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _second _shell _swapping 144071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _syserr _time _transient 145071d4279SBram Moolenaarsyn keyword btmBuiltInVar contained _video _win _wintitle _year 146071d4279SBram Moolenaar 147071d4279SBram Moolenaar" //Commands in 4DOS and/or DOS 148071d4279SBram Moolenaarsyn match btmCommand "\s?" 149071d4279SBram Moolenaarsyn match btmCommand "^?" 150071d4279SBram Moolenaarsyn keyword btmCommand alias append assign attrib 151071d4279SBram Moolenaarsyn keyword btmCommand backup beep break cancel case 152071d4279SBram Moolenaarsyn keyword btmCommand cd cdd cdpath chcp chdir 153071d4279SBram Moolenaarsyn keyword btmCommand chkdsk cls color comp copy 154071d4279SBram Moolenaarsyn keyword btmCommand ctty date debug default defrag 155071d4279SBram Moolenaarsyn keyword btmCommand del delay describe dir 156071d4279SBram Moolenaarsyn keyword btmCommand dirhistory dirs diskcomp 157071d4279SBram Moolenaarsyn keyword btmCommand diskcopy doskey dosshell 158071d4279SBram Moolenaarsyn keyword btmCommand drawbox drawhline drawvline 159071d4279SBram Moolenaar"syn keyword btmCommand echo echoerr echos echoserr 160071d4279SBram Moolenaarsyn keyword btmCommand edit edlin emm386 endlocal 161071d4279SBram Moolenaarsyn keyword btmCommand endswitch erase eset except 162071d4279SBram Moolenaarsyn keyword btmCommand exe2bin exit expand fastopen 163071d4279SBram Moolenaarsyn keyword btmCommand fc fdisk ffind find format 164071d4279SBram Moolenaarsyn keyword btmCommand free global gosub goto 165071d4279SBram Moolenaarsyn keyword btmCommand graftabl graphics help history 166071d4279SBram Moolenaarsyn keyword btmCommand inkey input join keyb keybd 167071d4279SBram Moolenaarsyn keyword btmCommand keystack label lh list loadbtm 168071d4279SBram Moolenaarsyn keyword btmCommand loadhigh lock log md mem 169071d4279SBram Moolenaarsyn keyword btmCommand memory mirror mkdir mode more 170071d4279SBram Moolenaarsyn keyword btmCommand move nlsfunc on option path 171071d4279SBram Moolenaarsyn keyword btmCommand pause popd print prompt pushd 172071d4279SBram Moolenaarsyn keyword btmCommand quit rd reboot recover ren 173071d4279SBram Moolenaarsyn keyword btmCommand rename replace restore return 174071d4279SBram Moolenaarsyn keyword btmCommand rmdir scandisk screen scrput 175071d4279SBram Moolenaarsyn keyword btmCommand select set setdos setlocal 176071d4279SBram Moolenaarsyn keyword btmCommand setver share shift sort subst 177071d4279SBram Moolenaarsyn keyword btmCommand swapping switch sys tee text 178071d4279SBram Moolenaarsyn keyword btmCommand time timer touch tree truename 179071d4279SBram Moolenaarsyn keyword btmCommand type unalias undelete unformat 180071d4279SBram Moolenaarsyn keyword btmCommand unlock unset ver verify vol 181071d4279SBram Moolenaarsyn keyword btmCommand vscrput y 182071d4279SBram Moolenaar 183071d4279SBram Moolenaar" Define the default highlighting. 18489bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 185071d4279SBram Moolenaar 186*f37506f6SBram Moolenaarhi def link btmLabel Special 187*f37506f6SBram Moolenaarhi def link btmLabelMark Special 188*f37506f6SBram Moolenaarhi def link btmCmdDivider Special 189*f37506f6SBram Moolenaarhi def link btmConditional btmStatement 190*f37506f6SBram Moolenaarhi def link btmDotBoolOp btmStatement 191*f37506f6SBram Moolenaarhi def link btmRepeat btmStatement 192*f37506f6SBram Moolenaarhi def link btmEchoCommand btmStatement 193*f37506f6SBram Moolenaarhi def link btmEchoParam btmStatement 194*f37506f6SBram Moolenaarhi def link btmStatement Statement 195*f37506f6SBram Moolenaarhi def link btmTodo Todo 196*f37506f6SBram Moolenaarhi def link btmString String 197*f37506f6SBram Moolenaarhi def link btmNumber Number 198*f37506f6SBram Moolenaarhi def link btmComment Comment 199*f37506f6SBram Moolenaarhi def link btmArgument Identifier 200*f37506f6SBram Moolenaarhi def link btmVariable Identifier 201*f37506f6SBram Moolenaarhi def link btmEcho String 202*f37506f6SBram Moolenaarhi def link btmBIFMatch btmStatement 203*f37506f6SBram Moolenaarhi def link btmBuiltInFunc btmStatement 204*f37506f6SBram Moolenaarhi def link btmBuiltInVar btmStatement 205*f37506f6SBram Moolenaarhi def link btmSpecialVar btmStatement 206*f37506f6SBram Moolenaarhi def link btmCommand btmStatement 207071d4279SBram Moolenaar 208071d4279SBram Moolenaar"optional highlighting 209*f37506f6SBram Moolenaar"hi def link btmShowTab Error 210*f37506f6SBram Moolenaar"hi def link btmShowTabc Error 211*f37506f6SBram Moolenaar"hi def link btmIdentifier Identifier 212071d4279SBram Moolenaar 213071d4279SBram Moolenaar 214071d4279SBram Moolenaarlet b:current_syntax = "btm" 215071d4279SBram Moolenaar 216071d4279SBram Moolenaar" vim: ts=8 217