diff runtime/syntax/dosbatch.vim @ 7:3fc0f57ecb91 v7.0001

updated for version 7.0001
author vimboss
date Sun, 13 Jun 2004 20:20:40 +0000
parents
children 53938adac247
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/dosbatch.vim
@@ -0,0 +1,158 @@
+" 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