mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04:00 
			
		
		
		
	
		
			
	
	
		
			159 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			159 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:	MSDOS batch file (with NT command extensions) | ||
|  | " Maintainer:	Mike Williams <mrw@eandem.co.uk> | ||
|  | " Filenames:    *.bat | ||
|  | " Last Change:	16th March 2004 | ||
|  | " Web Page:     http://www.eandem.co.uk/mrw/vim | ||
|  | " | ||
|  | " Options Flags: | ||
|  | " dosbatch_cmdextversion	- 1 = Windows NT, 2 = Windows 2000 [default] | ||
|  | " | ||
|  | 
 | ||
|  | " For version 5.x: Clear all syntax items | ||
|  | " For version 6.x: Quit when a syntax file was already loaded | ||
|  | if version < 600 | ||
|  |   syntax clear | ||
|  | elseif exists("b:current_syntax") | ||
|  |   finish | ||
|  | endif | ||
|  | 
 | ||
|  | " Set default highlighting to Win2k | ||
|  | if !exists("dosbatch_cmdextversion") | ||
|  |   let dosbatch_cmdextversion = 2 | ||
|  | endif | ||
|  | 
 | ||
|  | " DOS bat files are case insensitive but case preserving! | ||
|  | syn case ignore | ||
|  | 
 | ||
|  | syn keyword dosbatchTodo contained	TODO | ||
|  | 
 | ||
|  | " Dosbat keywords | ||
|  | syn keyword dosbatchStatement	goto call exit | ||
|  | syn keyword dosbatchConditional	if else | ||
|  | syn keyword dosbatchRepeat	for | ||
|  | 
 | ||
|  | " Some operators - first lot are case sensitive! | ||
|  | syn case match | ||
|  | syn keyword dosbatchOperator    EQU NEQ LSS LEQ GTR GEQ | ||
|  | syn case ignore | ||
|  | syn match dosbatchOperator      "\s[-+\*/%]\s" | ||
|  | syn match dosbatchOperator      "=" | ||
|  | syn match dosbatchOperator      "[-+\*/%]=" | ||
|  | syn match dosbatchOperator      "\s\(&\||\|^\|<<\|>>\)=\=\s" | ||
|  | syn match dosbatchIfOperator    "if\s\+\(\(not\)\=\s\+\)\=\(exist\|defined\|errorlevel\|cmdextversion\)\="lc=2 | ||
|  | 
 | ||
|  | " String - using "'s is a convenience rather than a requirement outside of FOR | ||
|  | syn match dosbatchString	"\"[^"]*\"" contains=dosbatchVariable,dosBatchArgument,@dosbatchNumber | ||
|  | syn match dosbatchString	"\<echo[^)>|]*"lc=4 contains=dosbatchVariable,dosbatchArgument,@dosbatchNumber | ||
|  | syn match dosbatchEchoOperator  "\<echo\s\+\(on\|off\)\s*$"lc=4 | ||
|  | 
 | ||
|  | " For embedded commands | ||
|  | syn match dosbatchCmd		"(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator | ||
|  | 
 | ||
|  | " Numbers - surround with ws to not include in dir and filenames | ||
|  | syn match dosbatchInteger       "[[:space:]=(/:]\d\+"lc=1 | ||
|  | syn match dosbatchHex		"[[:space:]=(/:]0x\x\+"lc=1 | ||
|  | syn match dosbatchBinary	"[[:space:]=(/:]0b[01]\+"lc=1 | ||
|  | syn match dosbatchOctal		"[[:space:]=(/:]0\o\+"lc=1 | ||
|  | syn cluster dosbatchNumber      contains=dosbatchInteger,dosbatchHex,dosbatchBinary,dosbatchOctal | ||
|  | 
 | ||
|  | " Command line switches | ||
|  | syn match dosbatchSwitch	"/\(\a\+\|?\)" | ||
|  | 
 | ||
|  | " Various special escaped char formats | ||
|  | syn match dosbatchSpecialChar   "\^[&|()<>^]" | ||
|  | syn match dosbatchSpecialChar   "\$[a-hl-npqstv_$+]" | ||
|  | syn match dosbatchSpecialChar   "%%" | ||
|  | 
 | ||
|  | " Environment variables | ||
|  | syn match dosbatchIdentifier    contained "\s\h\w*\>" | ||
|  | syn match dosbatchVariable	"%\h\w*%" | ||
|  | syn match dosbatchVariable	"%\h\w*:\*\=[^=]*=[^%]*%" | ||
|  | syn match dosbatchVariable	"%\h\w*:\~\d\+,\d\+%" contains=dosbatchInteger | ||
|  | syn match dosbatchVariable	"!\h\w*!" | ||
|  | syn match dosbatchVariable	"!\h\w*:\*\=[^=]*=[^%]*!" | ||
|  | syn match dosbatchVariable	"!\h\w*:\~\d\+,\d\+!" contains=dosbatchInteger | ||
|  | syn match dosbatchSet		"\s\h\w*[+-]\==\{-1}" contains=dosbatchIdentifier,dosbatchOperator | ||
|  | 
 | ||
|  | " Args to bat files and for loops, etc | ||
|  | syn match dosbatchArgument	"%\(\d\|\*\)" | ||
|  | syn match dosbatchArgument	"%%[a-z]\>" | ||
|  | if dosbatch_cmdextversion == 1 | ||
|  |   syn match dosbatchArgument	"%\~[fdpnxs]\+\(\($PATH:\)\=[a-z]\|\d\)\>" | ||
|  | else | ||
|  |   syn match dosbatchArgument	"%\~[fdpnxsatz]\+\(\($PATH:\)\=[a-z]\|\d\)\>" | ||
|  | endif | ||
|  | 
 | ||
|  | " Line labels | ||
|  | syn match dosbatchLabel		"^\s*:\s*\h\w*\>" | ||
|  | syn match dosbatchLabel		"\<\(goto\|call\)\s\+:\h\w*\>"lc=4 | ||
|  | syn match dosbatchLabel		"\<goto\s\+\h\w*\>"lc=4 | ||
|  | syn match dosbatchLabel		":\h\w*\>" | ||
|  | 
 | ||
|  | " Comments - usual rem but also two colons as first non-space is an idiom | ||
|  | syn match dosbatchComment	"^rem\($\|\s.*$\)"lc=3 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument | ||
|  | syn match dosbatchComment	"\srem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument | ||
|  | syn match dosbatchComment	"\s*:\s*:.*$" contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument | ||
|  | 
 | ||
|  | " Comments in ()'s - still to handle spaces before rem | ||
|  | syn match dosbatchComment	"(rem[^)]*"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument | ||
|  | 
 | ||
|  | syn keyword dosbatchImplicit    append assoc at attrib break cacls cd chcp chdir | ||
|  | syn keyword dosbatchImplicit    chkdsk chkntfs cls cmd color comp compact convert copy | ||
|  | syn keyword dosbatchImplicit    date del dir diskcomp diskcopy doskey echo endlocal | ||
|  | syn keyword dosbatchImplicit    erase fc find findstr format ftype | ||
|  | syn keyword dosbatchImplicit    graftabl help keyb label md mkdir mode more move | ||
|  | syn keyword dosbatchImplicit    path pause popd print prompt pushd rd recover rem | ||
|  | syn keyword dosbatchImplicit    ren rename replace restore rmdir set setlocal shift | ||
|  | syn keyword dosbatchImplicit    sort start subst time title tree type ver verify | ||
|  | syn keyword dosbatchImplicit    vol xcopy | ||
|  | 
 | ||
|  | " Define the default highlighting. | ||
|  | " For version 5.7 and earlier: only when not done already | ||
|  | " For version 5.8 and later: only when an item doesn't have highlighting yet | ||
|  | if version >= 508 || !exists("did_dosbatch_syntax_inits") | ||
|  |   if version < 508 | ||
|  |     let did_dosbatch_syntax_inits = 1 | ||
|  |     command -nargs=+ HiLink hi link <args> | ||
|  |   else | ||
|  |     command -nargs=+ HiLink hi def link <args> | ||
|  |   endif | ||
|  | 
 | ||
|  |   HiLink dosbatchTodo		Todo | ||
|  | 
 | ||
|  |   HiLink dosbatchStatement	Statement | ||
|  |   HiLink dosbatchCommands	dosbatchStatement | ||
|  |   HiLink dosbatchLabel		Label | ||
|  |   HiLink dosbatchConditional	Conditional | ||
|  |   HiLink dosbatchRepeat		Repeat | ||
|  | 
 | ||
|  |   HiLink dosbatchOperator	Operator | ||
|  |   HiLink dosbatchEchoOperator	dosbatchOperator | ||
|  |   HiLink dosbatchIfOperator	dosbatchOperator | ||
|  | 
 | ||
|  |   HiLink dosbatchArgument	Identifier | ||
|  |   HiLink dosbatchIdentifier	Identifier | ||
|  |   HiLink dosbatchVariable	dosbatchIdentifier | ||
|  | 
 | ||
|  |   HiLink dosbatchSpecialChar	SpecialChar | ||
|  |   HiLink dosbatchString		String | ||
|  |   HiLink dosbatchNumber		Number | ||
|  |   HiLink dosbatchInteger	dosbatchNumber | ||
|  |   HiLink dosbatchHex		dosbatchNumber | ||
|  |   HiLink dosbatchBinary		dosbatchNumber | ||
|  |   HiLink dosbatchOctal		dosbatchNumber | ||
|  | 
 | ||
|  |   HiLink dosbatchComment	Comment | ||
|  |   HiLink dosbatchImplicit	Function | ||
|  | 
 | ||
|  |   HiLink dosbatchSwitch		Special | ||
|  | 
 | ||
|  |   HiLink dosbatchCmd		PreProc | ||
|  | 
 | ||
|  |   delcommand HiLink | ||
|  | endif | ||
|  | 
 | ||
|  | let b:current_syntax = "dosbatch" | ||
|  | 
 | ||
|  | " vim: ts=8 |