xref: /vim-8.2.3635/runtime/syntax/sed.vim (revision f37506f6)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	sed
3071d4279SBram Moolenaar" Maintainer:	Haakon Riiser <[email protected]>
4071d4279SBram Moolenaar" URL:		http://folk.uio.no/hakonrk/vim/syntax/sed.vim
59db58063SBram Moolenaar" Last Change:	2010 May 29
6071d4279SBram Moolenaar
789bcfda6SBram Moolenaar" quit when a syntax file was already loaded
889bcfda6SBram Moolenaarif exists("b:current_syntax")
9071d4279SBram Moolenaar    finish
10071d4279SBram Moolenaarendif
11071d4279SBram Moolenaar
12071d4279SBram Moolenaarsyn match sedError	"\S"
13071d4279SBram Moolenaar
14071d4279SBram Moolenaarsyn match sedWhitespace "\s\+" contained
15071d4279SBram Moolenaarsyn match sedSemicolon	";"
16071d4279SBram Moolenaarsyn match sedAddress	"[[:digit:]$]"
17071d4279SBram Moolenaarsyn match sedAddress	"\d\+\~\d\+"
18071d4279SBram Moolenaarsyn region sedAddress   matchgroup=Special start="[{,;]\s*/\(\\/\)\="lc=1 skip="[^\\]\(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta
19071d4279SBram Moolenaarsyn region sedAddress   matchgroup=Special start="^\s*/\(\\/\)\=" skip="[^\\]\(\\\\\)*\\/" end="/I\=" contains=sedTab,sedRegexpMeta
20071d4279SBram Moolenaarsyn match sedComment	"^\s*#.*$"
2112033fb4SBram Moolenaarsyn match sedFunction	"[dDgGhHlnNpPqQx=]\s*\($\|;\)" contains=sedSemicolon,sedWhitespace
22071d4279SBram Moolenaarsyn match sedLabel	":[^;]*"
23071d4279SBram Moolenaarsyn match sedLineCont	"^\(\\\\\)*\\$" contained
24071d4279SBram Moolenaarsyn match sedLineCont	"[^\\]\(\\\\\)*\\$"ms=e contained
25071d4279SBram Moolenaarsyn match sedSpecial	"[{},!]"
26071d4279SBram Moolenaarif exists("highlight_sedtabs")
27071d4279SBram Moolenaar    syn match sedTab	"\t" contained
28071d4279SBram Moolenaarendif
29071d4279SBram Moolenaar
30071d4279SBram Moolenaar" Append/Change/Insert
31071d4279SBram Moolenaarsyn region sedACI	matchgroup=sedFunction start="[aci]\\$" matchgroup=NONE end="^.*$" contains=sedLineCont,sedTab
32071d4279SBram Moolenaar
33071d4279SBram Moolenaarsyn region sedBranch	matchgroup=sedFunction start="[bt]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace
34071d4279SBram Moolenaarsyn region sedRW	matchgroup=sedFunction start="[rw]" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace
35071d4279SBram Moolenaar
36071d4279SBram Moolenaar" Substitution/transform with various delimiters
37071d4279SBram Moolenaarsyn region sedFlagwrite	    matchgroup=sedFlag start="w" matchgroup=sedSemicolon end=";\|$" contains=sedWhitespace contained
38071d4279SBram Moolenaarsyn match sedFlag	    "[[:digit:]gpI]*w\=" contains=sedFlagwrite contained
39071d4279SBram Moolenaarsyn match sedRegexpMeta	    "[.*^$]" contained
40071d4279SBram Moolenaarsyn match sedRegexpMeta	    "\\." contains=sedTab contained
41071d4279SBram Moolenaarsyn match sedRegexpMeta	    "\[.\{-}\]" contains=sedTab contained
42071d4279SBram Moolenaarsyn match sedRegexpMeta	    "\\{\d\*,\d*\\}" contained
43071d4279SBram Moolenaarsyn match sedRegexpMeta	    "\\(.\{-}\\)" contains=sedTab contained
44071d4279SBram Moolenaarsyn match sedReplaceMeta    "&\|\\\($\|.\)" contains=sedTab contained
45071d4279SBram Moolenaar
46071d4279SBram Moolenaar" Metacharacters: $ * . \ ^ [ ~
47071d4279SBram Moolenaar" @ is used as delimiter and treated on its own below
48071d4279SBram Moolenaarlet __at = char2nr("@")
499db58063SBram Moolenaarlet __sed_i = char2nr(" ") " ASCII: 32, EBCDIC: 64
50071d4279SBram Moolenaarif has("ebcdic")
51071d4279SBram Moolenaar    let __sed_last = 255
52071d4279SBram Moolenaarelse
53071d4279SBram Moolenaar    let __sed_last = 126
54071d4279SBram Moolenaarendif
55071d4279SBram Moolenaarlet __sed_metacharacters = '$*.\^[~'
56071d4279SBram Moolenaarwhile __sed_i <= __sed_last
57071d4279SBram Moolenaar    let __sed_delimiter = escape(nr2char(__sed_i), __sed_metacharacters)
58071d4279SBram Moolenaar	if __sed_i != __at
59071d4279SBram Moolenaar	    exe 'syn region sedAddress matchgroup=Special start=@\\'.__sed_delimiter.'\(\\'.__sed_delimiter.'\)\=@ skip=@[^\\]\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'I\=@ contains=sedTab'
60071d4279SBram Moolenaar	    exe 'syn region sedRegexp'.__sed_i  'matchgroup=Special start=@'.__sed_delimiter.'\(\\\\\|\\'.__sed_delimiter.'\)*@ skip=@[^\\'.__sed_delimiter.']\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'@me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement'.__sed_i
61071d4279SBram Moolenaar	    exe 'syn region sedReplacement'.__sed_i 'matchgroup=Special start=@'.__sed_delimiter.'\(\\\\\|\\'.__sed_delimiter.'\)*@ skip=@[^\\'.__sed_delimiter.']\(\\\\\)*\\'.__sed_delimiter.'@ end=@'.__sed_delimiter.'@ contains=sedTab,sedReplaceMeta keepend contained nextgroup=sedFlag'
62071d4279SBram Moolenaar	endif
63071d4279SBram Moolenaar    let __sed_i = __sed_i + 1
64071d4279SBram Moolenaarendwhile
65071d4279SBram Moolenaarsyn region sedAddress matchgroup=Special start=+\\@\(\\@\)\=+ skip=+[^\\]\(\\\\\)*\\@+ end=+@I\=+ contains=sedTab,sedRegexpMeta
66071d4279SBram Moolenaarsyn region sedRegexp64 matchgroup=Special start=+@\(\\\\\|\\@\)*+ skip=+[^\\@]\(\\\\\)*\\@+ end=+@+me=e-1 contains=sedTab,sedRegexpMeta keepend contained nextgroup=sedReplacement64
67071d4279SBram Moolenaarsyn region sedReplacement64 matchgroup=Special start=+@\(\\\\\|\\@\)*+ skip=+[^\\@]\(\\\\\)*\\@+ end=+@+ contains=sedTab,sedReplaceMeta keepend contained nextgroup=sedFlag
68071d4279SBram Moolenaar
69071d4279SBram Moolenaar" Since the syntax for the substituion command is very similar to the
70071d4279SBram Moolenaar" syntax for the transform command, I use the same pattern matching
71071d4279SBram Moolenaar" for both commands.  There is one problem -- the transform command
72071d4279SBram Moolenaar" (y) does not allow any flags.  To save memory, I ignore this problem.
73071d4279SBram Moolenaarsyn match sedST	"[sy]" nextgroup=sedRegexp\d\+
74071d4279SBram Moolenaar
75071d4279SBram Moolenaar
76*f37506f6SBram Moolenaarhi def link sedAddress		Macro
77*f37506f6SBram Moolenaarhi def link sedACI		NONE
78*f37506f6SBram Moolenaarhi def link sedBranch		Label
79*f37506f6SBram Moolenaarhi def link sedComment		Comment
80*f37506f6SBram Moolenaarhi def link sedDelete		Function
81*f37506f6SBram Moolenaarhi def link sedError		Error
82*f37506f6SBram Moolenaarhi def link sedFlag		Type
83*f37506f6SBram Moolenaarhi def link sedFlagwrite		Constant
84*f37506f6SBram Moolenaarhi def link sedFunction		Function
85*f37506f6SBram Moolenaarhi def link sedLabel		Label
86*f37506f6SBram Moolenaarhi def link sedLineCont		Special
87*f37506f6SBram Moolenaarhi def link sedPutHoldspc	Function
88*f37506f6SBram Moolenaarhi def link sedReplaceMeta	Special
89*f37506f6SBram Moolenaarhi def link sedRegexpMeta	Special
90*f37506f6SBram Moolenaarhi def link sedRW		Constant
91*f37506f6SBram Moolenaarhi def link sedSemicolon		Special
92*f37506f6SBram Moolenaarhi def link sedST		Function
93*f37506f6SBram Moolenaarhi def link sedSpecial		Special
94*f37506f6SBram Moolenaarhi def link sedWhitespace	NONE
95071d4279SBram Moolenaarif exists("highlight_sedtabs")
96*f37506f6SBram Moolenaarhi def link sedTab		Todo
97071d4279SBram Moolenaarendif
989db58063SBram Moolenaarlet __sed_i = char2nr(" ") " ASCII: 32, EBCDIC: 64
999db58063SBram Moolenaarwhile __sed_i <= __sed_last
100*f37506f6SBram Moolenaarexe "hi def link sedRegexp".__sed_i		"Macro"
101*f37506f6SBram Moolenaarexe "hi def link sedReplacement".__sed_i	"NONE"
102071d4279SBram Moolenaarlet __sed_i = __sed_i + 1
103071d4279SBram Moolenaarendwhile
104071d4279SBram Moolenaar
105071d4279SBram Moolenaar
1069db58063SBram Moolenaarunlet __sed_i __sed_last __sed_delimiter __sed_metacharacters
107071d4279SBram Moolenaar
108071d4279SBram Moolenaarlet b:current_syntax = "sed"
109071d4279SBram Moolenaar
110071d4279SBram Moolenaar" vim: sts=4 sw=4 ts=8
111