awk.vim (8180B)
1 " Vim syntax file 2 " Language: awk, nawk, gawk, mawk 3 " Maintainer: Doug Kearns <dougkearns@gmail.com> 4 " Previous Maintainer: Antonio Colombo <azc100@gmail.com> 5 " Last Change: 2024 Oct 28 6 7 " AWK ref. is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger 8 " The AWK Programming Language, Addison-Wesley, 1988 9 10 " GAWK ref. is: Arnold D. Robbins 11 " Effective AWK Programming, Third Edition, O'Reilly, 2001 12 " Effective AWK Programming, Fourth Edition, O'Reilly, 2015 13 " (up-to-date version available with the gawk source distribution) 14 15 " MAWK is a "new awk" meaning it implements AWK ref. 16 " mawk conforms to the Posix 1003.2 (draft 11.3) 17 " definition of the AWK language which contains a few features 18 " not described in the AWK book, and mawk provides a small number of extensions. 19 20 " TODO: 21 " Dig into the commented out syntax expressions below. 22 23 " Quit when a syntax file was already loaded 24 if exists("b:current_syntax") 25 finish 26 endif 27 28 let s:cpo_save = &cpo 29 set cpo&vim 30 31 syn iskeyword @,48-57,_,192-255,@-@ 32 33 " A bunch of useful Awk keywords 34 " AWK ref. p. 188 35 syn keyword awkStatement break continue delete exit 36 syn keyword awkStatement function getline next 37 syn keyword awkStatement print printf return 38 " GAWK ref. Chapter 7-9 39 syn keyword awkStatement case default switch nextfile 40 syn keyword awkStatement func 41 " GAWK ref. Chapter 2.7, Including Other Files into Your Program 42 " GAWK ref. Chapter 2.8, Loading Dynamic Extensions into Your Program 43 " GAWK ref. Chapter 15, Namespaces 44 " Directives 45 syn keyword awkStatement @include @load @namespace 46 " 47 " GAWK ref. Chapter 9, Functions 48 " Numeric Functions 49 syn keyword awkFunction atan2 cos exp int log rand sin sqrt srand 50 " String Manipulation Functions 51 syn keyword awkFunction asort asorti gensub gsub index length match 52 syn keyword awkFunction patsplit split sprintf strtonum sub substr 53 syn keyword awkFunction tolower toupper 54 " Input Output Functions 55 syn keyword awkFunction close fflush system 56 " Time Functions 57 syn keyword awkFunction mktime strftime systime 58 " Bit Manipulation Functions 59 syn keyword awkFunction and compl lshift or rshift xor 60 " Getting Type Information Functions 61 syn keyword awkFunction isarray typeof 62 " String-Translation Functions 63 syn keyword awkFunction bindtextdomain dcgettext dcngetext 64 65 syn keyword awkConditional if else 66 syn keyword awkRepeat while for do 67 68 syn keyword awkTodo contained TODO 69 70 syn keyword awkPatterns BEGIN END BEGINFILE ENDFILE 71 72 " GAWK ref. Chapter 7 73 " Built-in Variables That Control awk 74 syn keyword awkVariables BINMODE CONVFMT FIELDWIDTHS FPAT FS 75 syn keyword awkVariables IGNORECASE LINT OFMT OFS ORS PREC 76 syn keyword awkVariables ROUNDMODE RS SUBSEP TEXTDOMAIN 77 " Built-in Variables That Convey Information 78 syn keyword awkVariables ARGC ARGV ARGIND ENVIRON ERRNO FILENAME 79 syn keyword awkVariables FNR NF FUNCTAB NR PROCINFO RLENGTH RSTART 80 syn keyword awkVariables RT SYMTAB 81 82 " Arithmetic operators: +, and - take care of ++, and -- 83 syn match awkOperator "+\|-\|\*\|/\|%\|=" 84 syn match awkOperator "+=\|-=\|\*=\|/=\|%=" 85 syn match awkOperator "\^\|\^=" 86 87 " Octal format character. 88 syn match awkSpecialCharacter display contained "\\[0-7]\{1,3\}" 89 " Hex format character. 90 syn match awkSpecialCharacter display contained "\\x[0-9A-Fa-f]\+" 91 92 syn match awkFieldVars "\$\d\+" 93 94 " catch errors caused by wrong parenthesis 95 syn region awkParen transparent start="(" end=")" contains=ALLBUT,awkParenError,awkSpecialCharacter,awkArrayElement,awkArrayArray,awkTodo,awkRegExp,awkBrktRegExp,awkBrackets,awkCharClass 96 syn match awkParenError display ")" 97 "syn match awkInParen display contained "[{}]" 98 99 " 64 lines for complex &&'s, and ||'s in a big "if" 100 syn sync ccomment awkParen maxlines=64 101 102 " Search strings & Regular Expressions therein. 103 syn region awkSearch oneline start="^[ \t]*/"ms=e start="\(,\|!\=\~\)[ \t]*/"ms=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter 104 syn region awkBrackets contained start="\[\^\]\="ms=s+2 start="\[[^\^]"ms=s+1 end="\]"me=e-1 contains=awkBrktRegExp,awkCharClass 105 syn region awkSearch oneline start="[ \t]*/"hs=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter 106 107 syn match awkCharClass contained "\[:[^:\]]*:\]" 108 syn match awkBrktRegExp contained "\\.\|.\-[^]]" 109 syn match awkRegExp contained "/\^"ms=s+1 110 syn match awkRegExp contained "\$/"me=e-1 111 syn match awkRegExp contained "[?.*{}|+]" 112 113 " String and Character constants 114 " Highlight special characters (those which have a backslash) differently 115 syn region awkString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell,awkSpecialCharacter,awkSpecialPrintf 116 syn match awkSpecialCharacter contained "\\." 117 118 " Some of these combinations may seem weird, but they work. 119 syn match awkSpecialPrintf contained "%[-+ #]*\d*\.\=\d*[cdefgiosuxEGX%]" 120 121 " Numbers, allowing signs (both -, and +) 122 " Integer number. 123 syn match awkNumber display "[+-]\=\<\d\+\>" 124 " Floating point number. 125 syn match awkFloat display "[+-]\=\<\d\+\.\d+\>" 126 " Floating point number, starting with a dot. 127 syn match awkFloat display "[+-]\=\<.\d+\>" 128 syn case ignore 129 "floating point number, with dot, optional exponent 130 syn match awkFloat display "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\>" 131 "floating point number, starting with a dot, optional exponent 132 syn match awkFloat display "\.\d\+\(e[-+]\=\d\+\)\=\>" 133 "floating point number, without dot, with exponent 134 syn match awkFloat display "\<\d\+e[-+]\=\d\+\>" 135 syn case match 136 137 "syn match awkIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" 138 139 " Comparison expressions. 140 syn match awkExpression "==\|>=\|=>\|<=\|=<\|\!=" 141 syn match awkExpression "\~\|\!\~" 142 syn match awkExpression "?\|:" 143 syn keyword awkExpression in 144 145 " Boolean Logic (OR, AND, NOT) 146 syn match awkBoolLogic "||\|&&\|\!" 147 148 " This is overridden by less-than & greater-than. 149 " Put this above those to override them. 150 " Put this in a 'match "\<printf\=\>.*;\="' to make it not override 151 " less/greater than (most of the time), but it won't work yet because 152 " keywords always have precedence over match & region. 153 " File I/O: (print foo, bar > "filename") & for nawk (getline < "filename") 154 "syn match awkFileIO contained ">" 155 "syn match awkFileIO contained "<" 156 157 " Expression separators: ';' and ',' 158 syn match awkSemicolon ";" 159 syn match awkComma "," 160 161 syn match awkComment "#.*" contains=@Spell,awkTodo 162 163 syn match awkLineSkip "\\$" 164 165 " Highlight array element's (recursive arrays allowed). 166 " Keeps nested array names' separate from normal array elements. 167 " Keeps numbers separate from normal array elements (variables). 168 syn match awkArrayArray contained "[^][, \t]\+\["me=e-1 169 syn match awkArrayElement contained "[^][, \t]\+" 170 syn region awkArray transparent start="\[" end="\]" contains=awkArray,awkArrayElement,awkArrayArray,awkNumber,awkFloat 171 172 " 10 should be enough. 173 " (for the few instances where it would be more than "oneline") 174 syn sync ccomment awkArray maxlines=10 175 176 " Define the default highlighting. 177 hi def link awkConditional Conditional 178 hi def link awkFunction Function 179 hi def link awkRepeat Repeat 180 hi def link awkStatement Statement 181 hi def link awkString String 182 hi def link awkSpecialPrintf Special 183 hi def link awkSpecialCharacter Special 184 hi def link awkSearch String 185 hi def link awkBrackets awkRegExp 186 hi def link awkBrktRegExp awkNestRegExp 187 hi def link awkCharClass awkNestRegExp 188 hi def link awkNestRegExp Keyword 189 hi def link awkRegExp Special 190 hi def link awkNumber Number 191 hi def link awkFloat Float 192 hi def link awkFileIO Special 193 hi def link awkOperator Special 194 hi def link awkExpression Special 195 hi def link awkBoolLogic Special 196 hi def link awkPatterns Special 197 hi def link awkVariables Special 198 hi def link awkFieldVars Special 199 hi def link awkLineSkip Special 200 hi def link awkSemicolon Special 201 hi def link awkComma Special 202 hi def link awkIdentifier Identifier 203 hi def link awkComment Comment 204 hi def link awkTodo Todo 205 " Change this if you want nested array names to be highlighted. 206 hi def link awkArrayArray awkArray 207 hi def link awkArrayElement Special 208 hi def link awkParenError awkError 209 hi def link awkInParen awkError 210 hi def link awkError Error 211 212 let b:current_syntax = "awk" 213 214 let &cpo = s:cpo_save 215 unlet s:cpo_save 216 217 " vim: ts=8