xref: /vim-8.2.3635/runtime/syntax/dosbatch.vim (revision 6c391a74)
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