Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 217 lines (173 sloc) 7.633 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
" Vim syntax file
" Language: awk, nawk, gawk, mawk
" Maintainer: Antonio Colombo <azc10@yahoo.com>
" Last Change: 2005 Mar 16

" AWK ref. is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger
" The AWK Programming Language, Addison-Wesley, 1988

" GAWK ref. is: Arnold D. Robbins
" Effective AWK Programming, Third Edition, O'Reilly, 2001

" MAWK is a "new awk" meaning it implements AWK ref.
" mawk conforms to the Posix 1003.2 (draft 11.3)
" definition of the AWK language which contains a few features
" not described in the AWK book, and mawk provides a small number of extensions.

" TODO:
" Dig into the commented out syntax expressions below.

" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
  syn clear
elseif exists("b:current_syntax")
  finish
endif

" A bunch of useful Awk keywords
" AWK ref. p. 188
syn keyword awkStatement break continue delete exit
syn keyword awkStatement function getline next
syn keyword awkStatement print printf return
" GAWK ref. p. 117
syn keyword awkStatement nextfile
" AWK ref. p. 42, GAWK ref. p. 142-166
syn keyword awkFunction atan2 close cos exp fflush int log rand sin sqrt srand
syn keyword awkFunction gsub index length match split sprintf sub
syn keyword awkFunction substr system
" GAWK ref. p. 142-166
syn keyword awkFunction asort gensub mktime strftime strtonum systime
syn keyword awkFunction tolower toupper
syn keyword awkFunction and or xor compl lshift rshift
syn keyword awkFunction dcgettext bindtextdomain

syn keyword awkConditional if else
syn keyword awkRepeat while for

syn keyword awkTodo contained TODO

syn keyword awkPatterns BEGIN END
" AWK ref. p. 36
syn keyword awkVariables ARGC ARGV FILENAME FNR FS NF NR
syn keyword awkVariables OFMT OFS ORS RLENGTH RS RSTART SUBSEP
" GAWK ref. p. 120-126
syn keyword awkVariables ARGIND BINMODE CONVFMT ENVIRON ERRNO
syn keyword awkVariables FIELDWIDTHS IGNORECASE LINT PROCINFO
syn keyword awkVariables RT RLENGTH TEXTDOMAIN

syn keyword awkRepeat do

" Octal format character.
syn match awkSpecialCharacter display contained "\\[0-7]\{1,3\}"
syn keyword awkStatement func nextfile
" Hex format character.
syn match awkSpecialCharacter display contained "\\x[0-9A-Fa-f]\+"

syn match awkFieldVars "\$\d\+"

"catch errors caused by wrong parenthesis
syn region awkParen transparent start="(" end=")" contains=ALLBUT,awkParenError,awkSpecialCharacter,awkArrayElement,awkArrayArray,awkTodo,awkRegExp,awkBrktRegExp,awkBrackets,awkCharClass
syn match awkParenError display ")"
syn match awkInParen display contained "[{}]"

" 64 lines for complex &&'s, and ||'s in a big "if"
syn sync ccomment awkParen maxlines=64

" Search strings & Regular Expressions therein.
syn region awkSearch oneline start="^[ \t]*/"ms=e start="\(,\|!\=\~\)[ \t]*/"ms=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter
syn region awkBrackets contained start="\[\^\]\="ms=s+2 start="\[[^\^]"ms=s+1 end="\]"me=e-1 contains=awkBrktRegExp,awkCharClass
syn region awkSearch oneline start="[ \t]*/"hs=e skip="\\\\\|\\/" end="/" contains=awkBrackets,awkRegExp,awkSpecialCharacter

syn match awkCharClass contained "\[:[^:\]]*:\]"
syn match awkBrktRegExp contained "\\.\|.\-[^]]"
syn match awkRegExp contained "/\^"ms=s+1
syn match awkRegExp contained "\$/"me=e-1
syn match awkRegExp contained "[?.*{}|+]"

" String and Character constants
" Highlight special characters (those which have a backslash) differently
syn region awkString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=awkSpecialCharacter,awkSpecialPrintf
syn match awkSpecialCharacter contained "\\."

" Some of these combinations may seem weird, but they work.
syn match awkSpecialPrintf contained "%[-+ #]*\d*\.\=\d*[cdefgiosuxEGX%]"

" Numbers, allowing signs (both -, and +)
" Integer number.
syn match awkNumber display "[+-]\=\<\d\+\>"
" Floating point number.
syn match awkFloat display "[+-]\=\<\d\+\.\d+\>"
" Floating point number, starting with a dot.
syn match awkFloat display "[+-]\=\<.\d+\>"
syn case ignore
"floating point number, with dot, optional exponent
syn match awkFloat display "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\>"
"floating point number, starting with a dot, optional exponent
syn match awkFloat display "\.\d\+\(e[-+]\=\d\+\)\=\>"
"floating point number, without dot, with exponent
syn match awkFloat display "\<\d\+e[-+]\=\d\+\>"
syn case match

"syn match awkIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>"

" Arithmetic operators: +, and - take care of ++, and --
"syn match awkOperator "+\|-\|\*\|/\|%\|="
"syn match awkOperator "+=\|-=\|\*=\|/=\|%="
"syn match awkOperator "^\|^="

" Comparison expressions.
"syn match awkExpression "==\|>=\|=>\|<=\|=<\|\!="
"syn match awkExpression "\~\|\!\~"
"syn match awkExpression "?\|:"
"syn keyword awkExpression in

" Boolean Logic (OR, AND, NOT)
"syn match awkBoolLogic "||\|&&\|\!"

" This is overridden by less-than & greater-than.
" Put this above those to override them.
" Put this in a 'match "\<printf\=\>.*;\="' to make it not override
" less/greater than (most of the time), but it won't work yet because
" keywords allways have precedence over match & region.
" File I/O: (print foo, bar > "filename") & for nawk (getline < "filename")
"syn match awkFileIO contained ">"
"syn match awkFileIO contained "<"

" Expression separators: ';' and ','
syn match awkSemicolon ";"
syn match awkComma ","

syn match awkComment "#.*" contains=awkTodo

syn match awkLineSkip "\\$"

" Highlight array element's (recursive arrays allowed).
" Keeps nested array names' separate from normal array elements.
" Keeps numbers separate from normal array elements (variables).
syn match awkArrayArray contained "[^][, \t]\+\["me=e-1
syn match awkArrayElement contained "[^][, \t]\+"
syn region awkArray transparent start="\[" end="\]" contains=awkArray,awkArrayElement,awkArrayArray,awkNumber,awkFloat

" 10 should be enough.
" (for the few instances where it would be more than "oneline")
syn sync ccomment awkArray maxlines=10

" define the default highlighting
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlightling yet
if version >= 508 || !exists("did_awk_syn_inits")
  if version < 508
    let did_awk_syn_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  HiLink awkConditional Conditional
  HiLink awkFunction Function
  HiLink awkRepeat Repeat
  HiLink awkStatement Statement

  HiLink awkString String
  HiLink awkSpecialPrintf Special
  HiLink awkSpecialCharacter Special

  HiLink awkSearch String
  HiLink awkBrackets awkRegExp
  HiLink awkBrktRegExp awkNestRegExp
  HiLink awkCharClass awkNestRegExp
  HiLink awkNestRegExp Keyword
  HiLink awkRegExp Special

  HiLink awkNumber Number
  HiLink awkFloat Float

  HiLink awkFileIO Special
"HiLink awkOperator Special
"HiLink awkExpression Special
  HiLink awkBoolLogic Special

  HiLink awkPatterns Special
  HiLink awkVariables Special
  HiLink awkFieldVars Special

  HiLink awkLineSkip Special
  HiLink awkSemicolon Special
  HiLink awkComma Special
"HiLink awkIdentifier Identifier

  HiLink awkComment Comment
  HiLink awkTodo Todo

" Change this if you want nested array names to be highlighted.
  HiLink awkArrayArray awkArray
  HiLink awkArrayElement Special

  HiLink awkParenError awkError
  HiLink awkInParen awkError
  HiLink awkError Error

  delcommand HiLink
endif

let b:current_syntax = "awk"

" vim: ts=8
Something went wrong with that request. Please try again.