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