" Vim syntax file " Language: Rust " Maintainer: Patrick Walton " Maintainer: Ben Blum " Last Change: 2013 Jun 14 if version < 600 syntax clear elseif exists("b:current_syntax") finish endif syn keyword rustConditional match if else syn keyword rustOperator as syn match rustAssert "\(); syn match rustMacro '\w\(\w\)*!' contains=rustAssert,rustFail syn match rustMacro '#\w\(\w\)*' contains=rustAssert,rustFail syn match rustFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn?]\|\[\^\=.[^]]*\]\)" contained syn match rustFormat display "%%" contained syn region rustString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=rustTodo,rustFormat syn region rustAttribute start="#\[" end="\]" contains=rustString,rustDeriving syn region rustDeriving start="deriving(" end=")" contains=rustTrait " Number literals syn match rustNumber display "\<[0-9][0-9_]*\>" syn match rustNumber display "\<[0-9][0-9_]*\(u\|u8\|u16\|u32\|u64\)\>" syn match rustNumber display "\<[0-9][0-9_]*\(i8\|i16\|i32\|i64\)\>" syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\>" syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(u\|u8\|u16\|u32\|u64\)\>" syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(i8\|i16\|i32\|i64\)\>" syn match rustBinNumber display "\<0b[01_]\+\>" syn match rustBinNumber display "\<0b[01_]\+\(u\|u8\|u16\|u32\|u64\)\>" syn match rustBinNumber display "\<0b[01_]\+\(i8\|i16\|i32\|i64\)\>" syn match rustFloat display "\<[0-9][0-9_]*\(f\|f32\|f64\)\>" syn match rustFloat display "\<[0-9][0-9_]*\([eE][+-]\=[0-9_]\+\)\>" syn match rustFloat display "\<[0-9][0-9_]*\([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>" syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\>" syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\(f\|f32\|f64\)\>" syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\>" syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>" "rustLifetime must appear before rustCharacter, or chars will get the lifetime highlighting syn match rustLifetime display "\'\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" syn match rustCharacter "'\([^'\\]\|\\\(['nrt\\\"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'" syn region rustCommentDoc start="/\*[\*!]" end="\*/" syn region rustCommentDoc start="//[/!]" skip="\\$" end="$" keepend syn match rustComment "/\*\*/" syn region rustComment start="/\*\([^\*!]\|$\)" end="\*/" contains=rustTodo syn region rustComment start="//\([^/!]\|$\)" skip="\\$" end="$" contains=rustTodo keepend syn keyword rustTodo contained TODO FIXME XXX NB hi def link rustHexNumber rustNumber hi def link rustBinNumber rustNumber hi def link rustIdentifierPrime rustIdentifier hi def link rustTrait rustType hi def link rustFormat Special hi def link rustString String hi def link rustCharacter Character hi def link rustNumber Number hi def link rustBoolean Boolean hi def link rustConstant Constant hi def link rustSelf Constant hi def link rustFloat Float hi def link rustOperator Operator hi def link rustKeyword Keyword hi def link rustConditional Conditional hi def link rustIdentifier Identifier hi def link rustModPath Include hi def link rustFuncName Function hi def link rustFuncCall Function hi def link rustCommentDoc SpecialComment hi def link rustComment Comment hi def link rustMacro Macro hi def link rustType Type hi def link rustTodo Todo hi def link rustAttribute PreProc hi def link rustDeriving PreProc hi def link rustStorage StorageClass hi def link rustLifetime Special " Other Suggestions: " hi rustAttribute ctermfg=cyan " hi rustDeriving ctermfg=cyan " hi rustAssert ctermfg=yellow " hi rustFail ctermfg=red " hi rustMacro ctermfg=magenta " hi rustModPathSep ctermfg=grey syn sync minlines=200 syn sync maxlines=500 let b:current_syntax = "rust"