1" Vim syntax file 2" Language: Erlang (http://www.erlang.org) 3" Maintainer: Csaba Hoch <[email protected]> 4" Last Update: 2013-Jul-25 5" License: Vim license 6" URL: https://github.com/hcs42/vim-erlang 7 8" Acknowledgements: This script was originally created by Kresimir Marzic [1]. 9" The script was then revamped by Csaba Hoch [2]. During the revamp, the new 10" highlighting style and some code was taken from the Erlang syntax script 11" that is part of vimerl [3], created by Oscar Hellström [4] and improved by 12" Ricardo Catalinas Jiménez [5]. 13 14" [1]: Kreąimir Marľić (Kresimir Marzic) <[email protected]> 15" [2]: Csaba Hoch <[email protected]> 16" [3]: https://github.com/jimenezrick/vimerl 17" [4]: Oscar Hellström <[email protected]> (http://oscar.hellstrom.st) 18" [5]: Ricardo Catalinas Jiménez <[email protected]> 19 20" Customization: 21" 22" To use the old highlighting style, add this to your .vimrc: 23" 24" let g:erlang_old_style_highlight = 1 25" 26" To highlight further module attributes, add them to 27" ~/.vim/after/syntax/erlang.vim: 28" 29" syn keyword erlangAttribute myattr1 myattr2 contained 30 31" quit when a syntax file was already loaded 32if exists("b:current_syntax") 33 finish 34endif 35 36let s:cpo_save = &cpo 37set cpo&vim 38 39" Case sensitive 40syn case match 41 42setlocal iskeyword+=$,@-@ 43 44" Comments 45syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo 46syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained 47syn match erlangCommentAnnotation /`[^']*'/ contained 48syn keyword erlangTodo TODO FIXME XXX contained 49syn match erlangShebang '^#!.*' 50 51" Numbers (minimum base is 2, maximum is 36.) 52syn match erlangNumberInteger '\<\d\+\>' 53syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>' 54syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>' 55 56" Strings, atoms, characters 57syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier 58syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier 59syn match erlangStringModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained 60syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained 61syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' 62 63" Operators, separators 64syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' 65syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse 66syn match erlangBracket '{\|}\|\[\|]\||\|||' 67syn match erlangPipe '|' 68syn match erlangRightArrow '->' 69 70" Atoms, function calls (order is important) 71syn match erlangAtom '\<\l[[:alnum:]_@]*' contains=erlangBoolean 72syn keyword erlangBoolean true false contained 73syn match erlangLocalFuncCall '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF 74syn match erlangLocalFuncRef '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' 75syn match erlangGlobalFuncCall '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangComment 76syn match erlangGlobalFuncRef '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' contains=erlangComment 77 78" Variables, macros, records 79syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*' 80syn match erlangMacro '??\=[[:alnum:]_@]\+' 81syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+' 82syn match erlangRecord '#\s*\l[[:alnum:]_@]*' 83 84" Bitstrings 85syn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment 86 87" Constants and Directives 88syn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment 89syn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\)\>' contains=erlangComment 90syn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment 91syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment 92syn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment 93syn match erlangPreCondit '^\s*-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment 94syn match erlangType '^\s*-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment 95 96" Keywords 97syn keyword erlangKeyword after begin case catch cond end fun if let of query 98syn keyword erlangKeyword receive when try 99 100" Build-in-functions (BIFs) 101syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained 102syn keyword erlangBIF binary_part binary_to_atom contained 103syn keyword erlangBIF binary_to_existing_atom binary_to_float contained 104syn keyword erlangBIF binary_to_integer bitstring_to_list contained 105syn keyword erlangBIF binary_to_list binary_to_term bit_size contained 106syn keyword erlangBIF byte_size check_old_code check_process_code contained 107syn keyword erlangBIF concat_binary date delete_module demonitor contained 108syn keyword erlangBIF disconnect_node element erase error exit contained 109syn keyword erlangBIF float float_to_binary float_to_list contained 110syn keyword erlangBIF garbage_collect get get_keys group_leader contained 111syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained 112syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained 113syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained 114syn keyword erlangBIF is_float is_function is_integer is_list contained 115syn keyword erlangBIF is_number is_pid is_port is_process_alive contained 116syn keyword erlangBIF is_record is_reference is_tuple length link contained 117syn keyword erlangBIF list_to_atom list_to_binary contained 118syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained 119syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained 120syn keyword erlangBIF list_to_tuple load_module make_ref max min contained 121syn keyword erlangBIF module_loaded monitor monitor_node node contained 122syn keyword erlangBIF nodes now open_port pid_to_list port_close contained 123syn keyword erlangBIF port_command port_connect pre_loaded contained 124syn keyword erlangBIF process_flag process_flag process_info contained 125syn keyword erlangBIF process purge_module put register registered contained 126syn keyword erlangBIF round self setelement size spawn spawn_link contained 127syn keyword erlangBIF spawn_monitor spawn_opt split_binary contained 128syn keyword erlangBIF statistics term_to_binary throw time tl contained 129syn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained 130syn keyword erlangBIF unregister whereis contained 131 132" Sync at the beginning of functions: if this is not used, multiline string 133" are not always recognized, and the indentation script cannot use the 134" "searchpair" (because it would not always skip strings and comments when 135" looking for keywords and opening parens/brackets). 136syn sync match erlangSync grouphere NONE "^[a-z]\s*(" 137let b:erlang_syntax_synced = 1 138 139" Define the default highlighting. See ":help group-name" for the groups and 140" their colors. 141 142let s:old_style = (exists("g:erlang_old_style_highlight") && 143 \g:erlang_old_style_highlight == 1) 144 145" Only when an item doesn't have highlighting yet 146 147" Comments 148hi def link erlangComment Comment 149hi def link erlangCommentAnnotation Special 150hi def link erlangTodo Todo 151hi def link erlangShebang Comment 152 153" Numbers 154hi def link erlangNumberInteger Number 155hi def link erlangNumberFloat Float 156 157" Strings, atoms, characters 158hi def link erlangString String 159 160if s:old_style 161hi def link erlangQuotedAtom Type 162else 163hi def link erlangQuotedAtom String 164endif 165 166hi def link erlangStringModifier Special 167hi def link erlangQuotedAtomModifier Special 168hi def link erlangModifier Special 169 170" Operators, separators 171hi def link erlangOperator Operator 172hi def link erlangRightArrow Operator 173if s:old_style 174hi def link erlangBracket Normal 175hi def link erlangPipe Normal 176else 177hi def link erlangBracket Delimiter 178hi def link erlangPipe Delimiter 179endif 180 181" Atoms, functions, variables, macros 182if s:old_style 183hi def link erlangAtom Normal 184hi def link erlangLocalFuncCall Normal 185hi def link erlangLocalFuncRef Normal 186hi def link erlangGlobalFuncCall Function 187hi def link erlangGlobalFuncRef Function 188hi def link erlangVariable Normal 189hi def link erlangMacro Normal 190hi def link erlangRecord Normal 191else 192hi def link erlangAtom String 193hi def link erlangLocalFuncCall Normal 194hi def link erlangLocalFuncRef Normal 195hi def link erlangGlobalFuncCall Normal 196hi def link erlangGlobalFuncRef Normal 197hi def link erlangVariable Identifier 198hi def link erlangMacro Macro 199hi def link erlangRecord Structure 200endif 201 202" Bitstrings 203if !s:old_style 204hi def link erlangBitType Type 205endif 206 207" Constants and Directives 208if s:old_style 209hi def link erlangAttribute Type 210hi def link erlangMacroDef Type 211hi def link erlangUnknownAttribute Normal 212hi def link erlangInclude Type 213hi def link erlangRecordDef Type 214hi def link erlangDefine Type 215hi def link erlangPreCondit Type 216hi def link erlangType Type 217else 218hi def link erlangAttribute Keyword 219hi def link erlangMacroDef Macro 220hi def link erlangUnknownAttribute Normal 221hi def link erlangInclude Include 222hi def link erlangRecordDef Keyword 223hi def link erlangDefine Define 224hi def link erlangPreCondit PreCondit 225hi def link erlangType Type 226endif 227 228" Keywords 229hi def link erlangKeyword Keyword 230 231" Build-in-functions (BIFs) 232hi def link erlangBIF Function 233 234if s:old_style 235hi def link erlangBoolean Statement 236hi def link erlangExtra Statement 237hi def link erlangSignal Statement 238else 239hi def link erlangBoolean Boolean 240hi def link erlangExtra Statement 241hi def link erlangSignal Statement 242endif 243 244 245let b:current_syntax = "erlang" 246 247let &cpo = s:cpo_save 248unlet s:cpo_save 249 250" vim: sw=2 et 251