xref: /vim-8.2.3635/runtime/syntax/awk.vim (revision 3132cddd)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:		awk, nawk, gawk, mawk
3*3132cdddSBram Moolenaar" Maintainer:		Doug Kearns <[email protected]>
4*3132cdddSBram Moolenaar" Previous Maintainer:	Antonio Colombo <[email protected]>
5207f0093SBram Moolenaar" Last Change:		2020 Aug 18
6071d4279SBram Moolenaar
7071d4279SBram Moolenaar" AWK  ref. is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger
8071d4279SBram Moolenaar" The AWK Programming Language, Addison-Wesley, 1988
9071d4279SBram Moolenaar
10071d4279SBram Moolenaar" GAWK ref. is: Arnold D. Robbins
11071d4279SBram Moolenaar" Effective AWK Programming, Third Edition, O'Reilly, 2001
128a94d873SBram Moolenaar" Effective AWK Programming, Fourth Edition, O'Reilly, 2015
13191acfdeSBram Moolenaar" (up-to-date version available with the gawk source distribution)
14071d4279SBram Moolenaar
15071d4279SBram Moolenaar" MAWK is a "new awk" meaning it implements AWK ref.
16071d4279SBram Moolenaar" mawk conforms to the Posix 1003.2 (draft 11.3)
17071d4279SBram Moolenaar" definition of the AWK language which contains a few features
18071d4279SBram Moolenaar" not described in the AWK book, and mawk provides a small number of extensions.
19071d4279SBram Moolenaar
20071d4279SBram Moolenaar" TODO:
21071d4279SBram Moolenaar" Dig into the commented out syntax expressions below.
22071d4279SBram Moolenaar
23269f595fSBram Moolenaar" Quit when a syntax file was already loaded
24269f595fSBram Moolenaarif exists("b:current_syntax")
25071d4279SBram Moolenaar  finish
26071d4279SBram Moolenaarendif
27071d4279SBram Moolenaar
28b8ff1fb5SBram Moolenaarlet s:cpo_save = &cpo
29b8ff1fb5SBram Moolenaarset cpo&vim
30b8ff1fb5SBram Moolenaar
31207f0093SBram Moolenaarsyn iskeyword @,48-57,_,192-255,@-@
32207f0093SBram Moolenaar
33071d4279SBram Moolenaar" A bunch of useful Awk keywords
34071d4279SBram Moolenaar" AWK  ref. p. 188
35071d4279SBram Moolenaarsyn keyword awkStatement	break continue delete exit
36071d4279SBram Moolenaarsyn keyword awkStatement	function getline next
37071d4279SBram Moolenaarsyn keyword awkStatement	print printf return
38269f595fSBram Moolenaar" GAWK ref. Chapter 7-9
39191acfdeSBram Moolenaarsyn keyword awkStatement	case default switch nextfile
40269f595fSBram Moolenaarsyn keyword awkStatement	func
41191acfdeSBram Moolenaar" GAWK ref. Chapter 2.7, Including Other Files into Your Program
42191acfdeSBram Moolenaar" GAWK ref. Chapter 2.8, Loading Dynamic Extensions into Your Program
43191acfdeSBram Moolenaar" GAWK ref. Chapter 15, Namespaces
44191acfdeSBram Moolenaar" Directives
45191acfdeSBram Moolenaarsyn keyword awkStatement	@include @load @namespace
468a94d873SBram Moolenaar"
478a94d873SBram Moolenaar" GAWK ref. Chapter 9, Functions
488a94d873SBram Moolenaar" Numeric Functions
49191acfdeSBram Moolenaarsyn keyword awkFunction	atan2 cos exp int log rand sin sqrt srand
508a94d873SBram Moolenaar" String Manipulation Functions
51191acfdeSBram Moolenaarsyn keyword awkFunction	asort asorti gensub gsub index length match
528a94d873SBram Moolenaarsyn keyword awkFunction	patsplit split sprintf strtonum sub substr
53071d4279SBram Moolenaarsyn keyword awkFunction	tolower toupper
548a94d873SBram Moolenaar" Input Output Functions
558a94d873SBram Moolenaarsyn keyword awkFunction	close fflush system
568a94d873SBram Moolenaar" Time Functions
578a94d873SBram Moolenaarsyn keyword awkFunction	mktime strftime systime
588a94d873SBram Moolenaar" Bit Manipulation Functions
598a94d873SBram Moolenaarsyn keyword awkFunction	and compl lshift or rshift xor
60191acfdeSBram Moolenaar" Getting Type Information Functions
61269f595fSBram Moolenaarsyn keyword awkFunction	isarray typeof
628a94d873SBram Moolenaar" String-Translation Functions
638a94d873SBram Moolenaarsyn keyword awkFunction	bindtextdomain dcgettext dcngetext
64071d4279SBram Moolenaar
65071d4279SBram Moolenaarsyn keyword awkConditional	if else
66269f595fSBram Moolenaarsyn keyword awkRepeat	while for do
67071d4279SBram Moolenaar
68071d4279SBram Moolenaarsyn keyword awkTodo	contained TODO
69071d4279SBram Moolenaar
70269f595fSBram Moolenaarsyn keyword awkPatterns	BEGIN END BEGINFILE ENDFILE
718a94d873SBram Moolenaar
728a94d873SBram Moolenaar" GAWK ref. Chapter 7
738a94d873SBram Moolenaar" Built-in Variables That Control awk
748a94d873SBram Moolenaarsyn keyword awkVariables        BINMODE CONVFMT FIELDWIDTHS FPAT FS
758a94d873SBram Moolenaarsyn keyword awkVariables	IGNORECASE LINT OFMT OFS ORS PREC
768a94d873SBram Moolenaarsyn keyword awkVariables	ROUNDMODE RS SUBSEP TEXTDOMAIN
778a94d873SBram Moolenaar" Built-in Variables That Convey Information
788a94d873SBram Moolenaarsyn keyword awkVariables	ARGC ARGV ARGIND ENVIRON ERRNO FILENAME
798a94d873SBram Moolenaarsyn keyword awkVariables	FNR NF FUNCTAB NR PROCINFO RLENGTH RSTART
808a94d873SBram Moolenaarsyn keyword awkVariables	RT SYMTAB
81071d4279SBram Moolenaar
8264d8e25bSBram Moolenaar" Arithmetic operators: +, and - take care of ++, and --
8364d8e25bSBram Moolenaarsyn match   awkOperator		"+\|-\|\*\|/\|%\|="
8464d8e25bSBram Moolenaarsyn match   awkOperator		"+=\|-=\|\*=\|/=\|%="
8564d8e25bSBram Moolenaarsyn match   awkOperator		"\^\|\^="
86071d4279SBram Moolenaar
87071d4279SBram Moolenaar" Octal format character.
88071d4279SBram Moolenaarsyn match   awkSpecialCharacter display contained "\\[0-7]\{1,3\}"
89071d4279SBram Moolenaar" Hex   format character.
90071d4279SBram Moolenaarsyn match   awkSpecialCharacter display contained "\\x[0-9A-Fa-f]\+"
91071d4279SBram Moolenaar
92071d4279SBram Moolenaarsyn match   awkFieldVars	"\$\d\+"
93071d4279SBram Moolenaar
94071d4279SBram Moolenaar" catch errors caused by wrong parenthesis
95269f595fSBram Moolenaarsyn region	awkParen	transparent start="(" end=")" contains=ALLBUT,awkParenError,awkSpecialCharacter,awkArrayElement,awkArrayArray,awkTodo,awkRegExp,awkBrktRegExp,awkBrackets,awkCharClass,awkComment
96071d4279SBram Moolenaarsyn match	awkParenError	display ")"
97269f595fSBram Moolenaar"syn match	awkInParen	display contained "[{}]"
98071d4279SBram Moolenaar
99071d4279SBram Moolenaar" 64 lines for complex &&'s, and ||'s in a big "if"
100071d4279SBram Moolenaarsyn sync ccomment awkParen maxlines=64
101071d4279SBram Moolenaar
102071d4279SBram Moolenaar" Search strings & Regular Expressions therein.
103071d4279SBram Moolenaarsyn region  awkSearch	oneline start="^[ \t]*/"ms=e start="\(,\|!\=\~\)[ \t]*/"ms=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter
104071d4279SBram Moolenaarsyn region  awkBrackets	contained start="\[\^\]\="ms=s+2 start="\[[^\^]"ms=s+1 end="\]"me=e-1 contains=awkBrktRegExp,awkCharClass
105071d4279SBram Moolenaarsyn region  awkSearch	oneline start="[ \t]*/"hs=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter
106071d4279SBram Moolenaar
107071d4279SBram Moolenaarsyn match   awkCharClass	contained "\[:[^:\]]*:\]"
108071d4279SBram Moolenaarsyn match   awkBrktRegExp	contained "\\.\|.\-[^]]"
109071d4279SBram Moolenaarsyn match   awkRegExp	contained "/\^"ms=s+1
110071d4279SBram Moolenaarsyn match   awkRegExp	contained "\$/"me=e-1
111071d4279SBram Moolenaarsyn match   awkRegExp	contained "[?.*{}|+]"
112071d4279SBram Moolenaar
113071d4279SBram Moolenaar" String and Character constants
114071d4279SBram Moolenaar" Highlight special characters (those which have a backslash) differently
1151aeaf8c0SBram Moolenaarsyn region  awkString	start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=@Spell,awkSpecialCharacter,awkSpecialPrintf
116071d4279SBram Moolenaarsyn match   awkSpecialCharacter contained "\\."
117071d4279SBram Moolenaar
118071d4279SBram Moolenaar" Some of these combinations may seem weird, but they work.
119071d4279SBram Moolenaarsyn match   awkSpecialPrintf	contained "%[-+ #]*\d*\.\=\d*[cdefgiosuxEGX%]"
120071d4279SBram Moolenaar
121071d4279SBram Moolenaar" Numbers, allowing signs (both -, and +)
122071d4279SBram Moolenaar" Integer number.
123071d4279SBram Moolenaarsyn match  awkNumber		display "[+-]\=\<\d\+\>"
124071d4279SBram Moolenaar" Floating point number.
125071d4279SBram Moolenaarsyn match  awkFloat		display "[+-]\=\<\d\+\.\d+\>"
126071d4279SBram Moolenaar" Floating point number, starting with a dot.
127071d4279SBram Moolenaarsyn match  awkFloat		display "[+-]\=\<.\d+\>"
128071d4279SBram Moolenaarsyn case ignore
129071d4279SBram Moolenaar"floating point number, with dot, optional exponent
130071d4279SBram Moolenaarsyn match  awkFloat	display "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\>"
131071d4279SBram Moolenaar"floating point number, starting with a dot, optional exponent
132071d4279SBram Moolenaarsyn match  awkFloat	display "\.\d\+\(e[-+]\=\d\+\)\=\>"
133071d4279SBram Moolenaar"floating point number, without dot, with exponent
134071d4279SBram Moolenaarsyn match  awkFloat	display "\<\d\+e[-+]\=\d\+\>"
135071d4279SBram Moolenaarsyn case match
136071d4279SBram Moolenaar
137071d4279SBram Moolenaar"syn match  awkIdentifier	"\<[a-zA-Z_][a-zA-Z0-9_]*\>"
138071d4279SBram Moolenaar
139071d4279SBram Moolenaar" Comparison expressions.
1408a94d873SBram Moolenaarsyn match   awkExpression	"==\|>=\|=>\|<=\|=<\|\!="
1418a94d873SBram Moolenaarsyn match   awkExpression	"\~\|\!\~"
1428a94d873SBram Moolenaarsyn match   awkExpression	"?\|:"
1438a94d873SBram Moolenaarsyn keyword awkExpression	in
144071d4279SBram Moolenaar
145071d4279SBram Moolenaar" Boolean Logic (OR, AND, NOT)
146269f595fSBram Moolenaarsyn match  awkBoolLogic	"||\|&&\|\!"
147071d4279SBram Moolenaar
148071d4279SBram Moolenaar" This is overridden by less-than & greater-than.
149071d4279SBram Moolenaar" Put this above those to override them.
150071d4279SBram Moolenaar" Put this in a 'match "\<printf\=\>.*;\="' to make it not override
151071d4279SBram Moolenaar" less/greater than (most of the time), but it won't work yet because
1521aeaf8c0SBram Moolenaar" keywords always have precedence over match & region.
153071d4279SBram Moolenaar" File I/O: (print foo, bar > "filename") & for nawk (getline < "filename")
154071d4279SBram Moolenaar"syn match  awkFileIO		contained ">"
155071d4279SBram Moolenaar"syn match  awkFileIO		contained "<"
156071d4279SBram Moolenaar
157071d4279SBram Moolenaar" Expression separators: ';' and ','
158071d4279SBram Moolenaarsyn match  awkSemicolon	";"
159071d4279SBram Moolenaarsyn match  awkComma		","
160071d4279SBram Moolenaar
1611aeaf8c0SBram Moolenaarsyn match  awkComment	"#.*" contains=@Spell,awkTodo
162071d4279SBram Moolenaar
163071d4279SBram Moolenaarsyn match  awkLineSkip	"\\$"
164071d4279SBram Moolenaar
165071d4279SBram Moolenaar" Highlight array element's (recursive arrays allowed).
166071d4279SBram Moolenaar" Keeps nested array names' separate from normal array elements.
167071d4279SBram Moolenaar" Keeps numbers separate from normal array elements (variables).
168071d4279SBram Moolenaarsyn match  awkArrayArray	contained "[^][, \t]\+\["me=e-1
169071d4279SBram Moolenaarsyn match  awkArrayElement      contained "[^][, \t]\+"
170071d4279SBram Moolenaarsyn region awkArray		transparent start="\[" end="\]" contains=awkArray,awkArrayElement,awkArrayArray,awkNumber,awkFloat
171071d4279SBram Moolenaar
172071d4279SBram Moolenaar" 10 should be enough.
173071d4279SBram Moolenaar" (for the few instances where it would be more than "oneline")
174071d4279SBram Moolenaarsyn sync ccomment awkArray maxlines=10
175071d4279SBram Moolenaar
176269f595fSBram Moolenaar" Define the default highlighting.
177269f595fSBram Moolenaarhi def link awkConditional	Conditional
178269f595fSBram Moolenaarhi def link awkFunction		Function
179269f595fSBram Moolenaarhi def link awkRepeat		Repeat
180269f595fSBram Moolenaarhi def link awkStatement	Statement
181269f595fSBram Moolenaarhi def link awkString		String
182269f595fSBram Moolenaarhi def link awkSpecialPrintf	Special
183269f595fSBram Moolenaarhi def link awkSpecialCharacter	Special
184269f595fSBram Moolenaarhi def link awkSearch		String
185269f595fSBram Moolenaarhi def link awkBrackets		awkRegExp
186269f595fSBram Moolenaarhi def link awkBrktRegExp	awkNestRegExp
187269f595fSBram Moolenaarhi def link awkCharClass	awkNestRegExp
188269f595fSBram Moolenaarhi def link awkNestRegExp	Keyword
189269f595fSBram Moolenaarhi def link awkRegExp		Special
190269f595fSBram Moolenaarhi def link awkNumber		Number
191269f595fSBram Moolenaarhi def link awkFloat		Float
192269f595fSBram Moolenaarhi def link awkFileIO		Special
193269f595fSBram Moolenaarhi def link awkOperator		Special
194269f595fSBram Moolenaarhi def link awkExpression	Special
195269f595fSBram Moolenaarhi def link awkBoolLogic	Special
196269f595fSBram Moolenaarhi def link awkPatterns		Special
197269f595fSBram Moolenaarhi def link awkVariables	Special
198269f595fSBram Moolenaarhi def link awkFieldVars	Special
199269f595fSBram Moolenaarhi def link awkLineSkip		Special
200269f595fSBram Moolenaarhi def link awkSemicolon	Special
201269f595fSBram Moolenaarhi def link awkComma		Special
202269f595fSBram Moolenaarhi def link awkIdentifier	Identifier
203269f595fSBram Moolenaarhi def link awkComment		Comment
204269f595fSBram Moolenaarhi def link awkTodo		Todo
205071d4279SBram Moolenaar" Change this if you want nested array names to be highlighted.
206269f595fSBram Moolenaarhi def link awkArrayArray	awkArray
207269f595fSBram Moolenaarhi def link awkArrayElement	Special
208269f595fSBram Moolenaarhi def link awkParenError	awkError
209269f595fSBram Moolenaarhi def link awkInParen		awkError
210269f595fSBram Moolenaarhi def link awkError		Error
211071d4279SBram Moolenaar
212071d4279SBram Moolenaarlet b:current_syntax = "awk"
213071d4279SBram Moolenaar
214b8ff1fb5SBram Moolenaarlet &cpo = s:cpo_save
215b8ff1fb5SBram Moolenaarunlet s:cpo_save
216b8ff1fb5SBram Moolenaar
217071d4279SBram Moolenaar" vim: ts=8
218