| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim syntax file | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | " Language:		sed | 
					
						
							|  |  |  | " Maintainer:		Doug Kearns <dougkearns@gmail.com> | 
					
						
							|  |  |  | " Previous Maintainer:	Haakon Riiser <hakonrk@fys.uio.no> | 
					
						
							|  |  |  | " Contributor:		Jack Haden-Enneking | 
					
						
							|  |  |  | " Last Change:		2022 Oct 15 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-30 23:26:57 +02:00
										 |  |  | " quit when a syntax file was already loaded | 
					
						
							|  |  |  | if exists("b:current_syntax") | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  |   finish | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | syn keyword sedTodo	contained TODO FIXME XXX | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | syn match sedError	"\S" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn match sedWhitespace "\s\+" contained | 
					
						
							|  |  |  | syn match sedSemicolon	";" | 
					
						
							|  |  |  | syn match sedAddress	"[[:digit:]$]" | 
					
						
							|  |  |  | syn match sedAddress	"\d\+\~\d\+" | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | syn region sedAddress	matchgroup=Special start="[{,;]\s*/\%(\\/\)\="lc=1 skip="[^\\]\%(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta | 
					
						
							|  |  |  | syn region sedAddress	matchgroup=Special start="^\s*/\%(\\/\)\=" skip="[^\\]\%(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta | 
					
						
							|  |  |  | syn match sedFunction	"[dDgGhHlnNpPqQx=]\s*\%($\|;\)" contains=sedSemicolon,sedWhitespace | 
					
						
							|  |  |  | if exists("g:sed_dialect") && g:sed_dialect ==? "bsd" | 
					
						
							|  |  |  |   syn match sedComment	"^\s*#.*$" contains=sedTodo | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   syn match sedFunction	"[dDgGhHlnNpPqQx=]\s*\ze#" contains=sedSemicolon,sedWhitespace | 
					
						
							|  |  |  |   syn match sedComment	"#.*$" contains=sedTodo | 
					
						
							|  |  |  | endif | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | syn match sedLabel	":[^;]*" | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | syn match sedLineCont	"^\%(\\\\\)*\\$" contained | 
					
						
							|  |  |  | syn match sedLineCont	"[^\\]\%(\\\\\)*\\$"ms=e contained | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | syn match sedSpecial	"[{},!]" | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | " continue to silently support the old name | 
					
						
							|  |  |  | let s:highlight_tabs = v:false | 
					
						
							|  |  |  | if exists("g:highlight_sedtabs") || get(g:, "sed_highlight_tabs", 0) | 
					
						
							|  |  |  |   let s:highlight_tabs = v:true | 
					
						
							|  |  |  |   syn match sedTab	"\t" contained | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Append/Change/Insert | 
					
						
							|  |  |  | syn region sedACI	matchgroup=sedFunction start="[aci]\\$" matchgroup=NONE end="^.*$" contains=sedLineCont,sedTab | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | syn region sedBranch	matchgroup=sedFunction start="[bt]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace | 
					
						
							|  |  |  | syn region sedRW	matchgroup=sedFunction start="[rw]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Substitution/transform with various delimiters | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | syn region sedFlagWrite	    matchgroup=sedFlag start="w" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace contained | 
					
						
							|  |  |  | syn match sedFlag	    "[[:digit:]gpI]*w\=" contains=sedFlagWrite contained | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | syn match sedRegexpMeta	    "[.*^$]" contained | 
					
						
							|  |  |  | syn match sedRegexpMeta	    "\\." contains=sedTab contained | 
					
						
							|  |  |  | syn match sedRegexpMeta	    "\[.\{-}\]" contains=sedTab contained | 
					
						
							|  |  |  | syn match sedRegexpMeta	    "\\{\d\*,\d*\\}" contained | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | syn match sedRegexpMeta	    "\\%(.\{-}\\)" contains=sedTab contained | 
					
						
							|  |  |  | syn match sedReplaceMeta    "&\|\\\%($\|.\)" contains=sedTab contained | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Metacharacters: $ * . \ ^ [ ~ | 
					
						
							|  |  |  | " @ is used as delimiter and treated on its own below | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | let s:at = char2nr("@") | 
					
						
							|  |  |  | let s:i = char2nr(" ") " ASCII: 32, EBCDIC: 64 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | if has("ebcdic") | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  |   let s:last = 255 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | else | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  |   let s:last = 126 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | let s:metacharacters = '$*.\^[~' | 
					
						
							|  |  |  | while s:i <= s:last | 
					
						
							|  |  |  |   let s:delimiter = escape(nr2char(s:i), s:metacharacters) | 
					
						
							|  |  |  |   if s:i != s:at | 
					
						
							|  |  |  |     exe 'syn region sedAddress matchgroup=Special start=@\\'.s:delimiter.'\%(\\'.s:delimiter.'\)\=@ skip=@[^\\]\%(\\\\\)*\\'.s:delimiter.'@ end=@'.s:delimiter.'[IM]\=@ contains=sedTab' | 
					
						
							|  |  |  |     exe 'syn region sedRegexp'.s:i  'matchgroup=Special start=@'.s:delimiter.'\%(\\\\\|\\'.s:delimiter.'\)*@ skip=@[^\\'.s:delimiter.']\%(\\\\\)*\\'.s:delimiter.'@ end=@'.s:delimiter.'@me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement'.s:i | 
					
						
							|  |  |  |     exe 'syn region sedReplacement'.s:i 'matchgroup=Special start=@'.s:delimiter.'\%(\\\\\|\\'.s:delimiter.'\)*@ skip=@[^\\'.s:delimiter.']\%(\\\\\)*\\'.s:delimiter.'@ end=@'.s:delimiter.'@ contains=sedTab,sedReplaceMeta keepend contained nextgroup=@sedFlags' | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  |   let s:i = s:i + 1 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endwhile | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | syn region sedAddress matchgroup=Special start=+\\@\%(\\@\)\=+ skip=+[^\\]\%(\\\\\)*\\@+ end=+@I\=+ contains=sedTab,sedRegexpMeta | 
					
						
							|  |  |  | syn region sedRegexp64 matchgroup=Special start=+@\%(\\\\\|\\@\)*+ skip=+[^\\@]\%(\\\\\)*\\@+ end=+@+me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement64 | 
					
						
							|  |  |  | syn region sedReplacement64 matchgroup=Special start=+@\%(\\\\\|\\@\)*+ skip=+[^\\@]\%(\\\\\)*\\@+ end=+@+ contains=sedTab,sedReplaceMeta keepend contained nextgroup=sedFlag | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | " Since the syntax for the substitution command is very similar to the | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " syntax for the transform command, I use the same pattern matching | 
					
						
							|  |  |  | " for both commands.  There is one problem -- the transform command | 
					
						
							|  |  |  | " (y) does not allow any flags.  To save memory, I ignore this problem. | 
					
						
							|  |  |  | syn match sedST	"[sy]" nextgroup=sedRegexp\d\+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-31 22:22:10 +02:00
										 |  |  | hi def link sedAddress		Macro | 
					
						
							|  |  |  | hi def link sedACI		NONE | 
					
						
							|  |  |  | hi def link sedBranch		Label | 
					
						
							|  |  |  | hi def link sedComment		Comment | 
					
						
							|  |  |  | hi def link sedDelete		Function | 
					
						
							|  |  |  | hi def link sedError		Error | 
					
						
							|  |  |  | hi def link sedFlag		Type | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | hi def link sedFlagWrite	Constant | 
					
						
							| 
									
										
										
										
											2016-08-31 22:22:10 +02:00
										 |  |  | hi def link sedFunction		Function | 
					
						
							|  |  |  | hi def link sedLabel		Label | 
					
						
							|  |  |  | hi def link sedLineCont		Special | 
					
						
							|  |  |  | hi def link sedPutHoldspc	Function | 
					
						
							|  |  |  | hi def link sedReplaceMeta	Special | 
					
						
							|  |  |  | hi def link sedRegexpMeta	Special | 
					
						
							|  |  |  | hi def link sedRW		Constant | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | hi def link sedSemicolon	Special | 
					
						
							| 
									
										
										
										
											2016-08-31 22:22:10 +02:00
										 |  |  | hi def link sedST		Function | 
					
						
							|  |  |  | hi def link sedSpecial		Special | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | hi def link sedTodo		Todo | 
					
						
							| 
									
										
										
										
											2016-08-31 22:22:10 +02:00
										 |  |  | hi def link sedWhitespace	NONE | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | if s:highlight_tabs | 
					
						
							|  |  |  |   hi def link sedTab		Todo | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | let s:i = char2nr(" ") " ASCII: 32, EBCDIC: 64 | 
					
						
							|  |  |  | while s:i <= s:last | 
					
						
							|  |  |  |   exe "hi def link sedRegexp".s:i	"Macro" | 
					
						
							|  |  |  |   exe "hi def link sedReplacement".s:i	"NONE" | 
					
						
							|  |  |  |   let s:i = s:i + 1 | 
					
						
							| 
									
										
										
										
											2016-08-30 23:26:57 +02:00
										 |  |  | endwhile | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | unlet s:i s:last s:delimiter s:metacharacters s:at | 
					
						
							|  |  |  | unlet s:highlight_tabs | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | let b:current_syntax = "sed" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | " vim: nowrap sw=2 sts=2 ts=8 noet: |