Vim Bro Mode

From BroWiki

Jump to: navigation, search
" ---------------------------------------------------------------------
" File: bro.vim
" Birthday: Wed Aug 03 10:41:01 PDT 2005 
" Author: Martin Casado
"         (... also without a clue about writing VIM syntax files
"           thanks python.vim & c.vim!)
"
" * PROBLEMS *
"   - keywords within hyphenated words (e.g. "port" in port-name) are
"     highlighted
"
" 
" ---------------------------------------------------------------------

if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

syn keyword broStatement     break continue del
syn keyword broStatement     case
syn keyword broStatement     alarm using
syn keyword broStatement     default delete else 
syn keyword broStatement     event efmt 
syn keyword broStatement     local match next
syn keyword broStatement     print return schedule
syn keyword broStatement     switch this type

syn keyword broStorageClass  const global redef global_attr export

syn keyword broOperator      in add of any

syn keyword broStatement     function nextgroup=broFunction skipwhite
syn match   broFunction      "[a-zA-Z_][a-zA-Z0-9_]*" contained

syn keyword broType          addr bool count 
syn keyword broType          counter double enum 
syn keyword broType          file int interval 
syn keyword broType          list net pattern    
syn keyword broType          port record set
syn keyword broType          string subnet table
syn keyword broType          timer time union
syn keyword broType          vector 

syn keyword broDate          day days hr hrs
syn keyword broDate          min mins sec
syn keyword broDate          secs msec msecs
syn keyword broDate          usec usecs

syn match broPreCondit     "@load"

syn keyword broRepeat        for

syn keyword broConditional   if else

" String and Character constants
" Highlight special characters (those which have a backslash) differently
syn match     cSpecial        display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
syn match     cSpecial        display contained "\\\(u\x\{4}\|U\x\{8}\)"
syn match     cFormat         display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
syn match     cFormat         display "%%" contained
syn region    cString         start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell

syn match  broEscape         +\\[abfnrtv'"\\]+ contained
syn match  broEscape         "\\\o\{1,3}" contained
syn match  broEscape         "\\x\x\{2}" contained
syn match  broEscape         "\(\\u\x\{4}\|\\U\x\{8}\)" contained
syn match  broEscape         "\\$"

syn match   broComment       "#.*$" contains=broTodo
syn keyword broTodo          TODO FIXME XXX contained

" numbers (including longs and complex)
syn match   broNumber      "\<0x\x\+[Ll]\=\>"
syn match   broNumber      "\<\d\+[LljJ]\=\>"
syn match   broNumber      "\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"
syn match   broNumber      "\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>"
syn match   broNumber      "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"

if version >= 508 || !exists("did_bro_syn_inits")
  if version <= 508
    let did_bro_syn_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  " The default methods for highlighting.  Can be overridden later
  HiLink broStatement        Statement
  HiLink broFunction         Function
  HiLink broConditional      Conditional
  HiLink broRepeat           Repeat
  HiLink broEscape           Special
  HiLink broType             Type
  HiLink broPreCondit        PreCondit
  HiLink broComment          Comment
  HiLink broTodo             Todo
  HiLink broNumber           Number
  HiLink broOperator         Operator
  HiLink broStorageClass     StorageClass 
  HiLink broDate             SpecialChar 
  HiLink cString             String
  HiLink cFormat                cSpecial
  HiLink cSpecial            SpecialChar

  delcommand HiLink
endif

let b:current_syntax = "bro"
Personal tools