1" Vim syntax file 2" Language: Erlang (http://www.erlang.org) 3" Maintainer: Csaba Hoch <[email protected]> 4" Former Maintainer: Kreąimir Marľić (Kresimir Marzic) <[email protected]> 5" Last Update: 2013-Mar-07 6" License: Vim license 7" URL: https://github.com/hcs42/vim-erlang 8 9" Customization: 10" 11" There are two optional sets of highlighting: 12" 13" 1. The BIFs (built-in functions) are highlighted by default. To disable 14" this, put the following line in your vimrc: 15" 16" let g:erlang_highlight_bifs = 0 17" 18" 2. To enable highlighting some special atoms, put this in your vimrc: 19" 20" let g:erlang_highlight_special_atoms = 1 21 22" For version 5.x: Clear all syntax items 23" For version 6.x: Quit when a syntax file was already loaded 24if version < 600 25 syntax clear 26elseif exists("b:current_syntax") 27 finish 28endif 29 30" Case sensitive 31syn case match 32 33if version >= 600 34 setlocal iskeyword+=$,@-@ 35endif 36 37" Comments 38syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo 39syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained 40syn match erlangCommentAnnotation /`[^']*'/ contained 41syn keyword erlangTodo TODO FIXME XXX contained 42 43" Numbers (minimum base is 2, maximum is 36.) 44syn match erlangNumberInteger '\<\d\+\>' 45syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>' 46syn match erlangNumberFloat '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>' 47 48" Strings, atoms, characters 49syn region erlangString start=/"/ end=/"/ contains=erlangStringModifier 50syn region erlangQuotedAtom start=/'/ end=/'/ contains=erlangQuotedAtomModifier 51syn match erlangStringModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained 52syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained 53syn match erlangModifier '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)' 54 55" Operators 56syn match erlangOperator '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/' 57syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse 58 59" Separators 60syn match erlangSeparator '(\|)\|{\|}\|\[\|]\||\|||\|;\|,\|?\|#' 61syn match erlangRightArrow '->' 62 63" Functions call 64syn match erlangFCall '\<\%(\a[[:alnum:]@]*\s*\.\s*\)*\a[[:alnum:]@]*\s*:\s*\a[[:alnum:]@]*\>' 65 66" Constants and Directives 67syn match erlangDirective '-\%(behaviour\|behavior\|compile\|define\|else\|endif\|export\|file\|ifdef\|ifndef\|import\|include_lib\|include\|module\|record\|undef\|author\|copyright\|doc\|vsn\|on_load\|export_type\)\>' 68 69" Keywords 70syn keyword erlangKeyword after begin case catch cond end fun if let of query receive when try 71syn keyword erlangExtra true false 72 73 74if !exists("g:erlang_highlight_bifs") || g:erlang_highlight_bifs == 1 75 76 " build-in-functions (BIFs) 77 syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list binary_part binary_to_atom binary_to_existing_atom binary_to_float binary_to_integer bitstring_to_list binary_to_list binary_to_term bit_size byte_size check_old_code check_process_code concat_binary date delete_module demonitor disconnect_node element erase error exit float float_to_binary float_to_list garbage_collect get get_keys group_leader halt hd integer_to_binary integer_to_list iolist_to_binary iolist_size is_alive is_atom is_binary is_bitstring is_boolean is_float is_function is_integer is_list is_number is_pid is_port is_process_alive is_record is_reference is_tuple length link list_to_atom list_to_binary list_to_bitstring list_to_existing_atom list_to_float list_to_integer list_to_pid list_to_tuple load_module make_ref max min module_loaded monitor monitor_node node nodes now open_port pid_to_list port_close port_command port_connect pre_loaded process_flag process_flag process_info process purge_module put register registered round self setelement size spawn spawn_link spawn_monitor spawn_opt split_binary statistics term_to_binary throw time tl trunc tuple_size tuple_to_list unlink unregister whereis 78 79endif 80 81 82if exists("g:erlang_highlight_special_atoms") && g:erlang_highlight_special_atoms == 1 83 84 " Processes 85 syn keyword erlangProcess creation current_function dictionary 86 syn keyword erlangProcess group_leader heap_size high initial_call 87 syn keyword erlangProcess linked low memory_in_use message_queue 88 syn keyword erlangProcess net_kernel node normal priority 89 syn keyword erlangProcess reductions registered_name runnable 90 syn keyword erlangProcess running stack_trace status timer 91 syn keyword erlangProcess trap_exit waiting 92 93 " Ports 94 syn keyword erlangPort command count_in count_out creation in 95 syn keyword erlangPort in_format linked node out owner packeting 96 97 " Nodes 98 syn keyword erlangNode atom_tables communicating creation 99 syn keyword erlangNode current_gc current_reductions current_runtime 100 syn keyword erlangNode current_wall_clock distribution_port 101 syn keyword erlangNode entry_points error_handler friends 102 syn keyword erlangNode garbage_collection magic_cookie magic_cookies 103 syn keyword erlangNode module_table monitored_nodes name next_ref 104 syn keyword erlangNode ports preloaded processes reductions 105 syn keyword erlangNode ref_state registry runtime wall_clock 106 107 " Reserved 108 syn keyword erlangReserved apply_lambda module_info module_lambdas 109 syn keyword erlangReserved record record_index record_info 110 111 " Extras 112 syn keyword erlangExtra badarg nocookie 113 114 " Signals 115 syn keyword erlangSignal badsig kill killed exit normal 116endif 117 118" Sync at the beginning of functions: if this is not used, multiline string 119" are not always recognized 120syn sync match erlangSync grouphere NONE "^[a-z]\s*(" 121 122" Define the default highlighting. 123" For version 5.7 and earlier: only when not done already 124" For version 5.8 and later: only when an item doesn't have highlighting yet 125if version >= 508 || !exists ("did_erlang_inits") 126 if version < 508 127 let did_erlang_inits = 1 128 command -nargs=+ HiLink hi link <args> 129 else 130 command -nargs=+ HiLink hi def link <args> 131 endif 132 133 " erlang_characters 134 HiLink erlangComment Comment 135 HiLink erlangCommentAnnotation Special 136 HiLink erlangTodo Todo 137 HiLink erlangSeparator Normal 138 HiLink erlangOperator Operator 139 HiLink erlangRightArrow Operator 140 141 HiLink erlangStartString String 142 HiLink erlangString String 143 HiLink erlangStringModifier Special 144 145 HiLink erlangStartQuotedAtom Type 146 HiLink erlangQuotedAtom Type 147 HiLink erlangQuotedAtomModifier Special 148 149 HiLink erlangNumberInteger Number 150 HiLink erlangNumberFloat Float 151 HiLink erlangNumberHex Number 152 153 HiLink erlangModifier Special 154 155 " erlang_functions 156 HiLink erlangFCall Function 157 HiLink erlangBIF Function 158 159 " erlang_keywords 160 HiLink erlangDirective Type 161 HiLink erlangKeyword Keyword 162 HiLink erlangProcess Special 163 HiLink erlangPort Special 164 HiLink erlangNode Special 165 HiLink erlangReserved Statement 166 HiLink erlangExtra Statement 167 HiLink erlangSignal Statement 168 169 delcommand HiLink 170endif 171 172 173let b:current_syntax = "erlang" 174 175" vim: sw=2 et 176