neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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