1" Vim syntax file 2" Language: Java 3" Maintainer: Claudio Fleiner <[email protected]> 4" URL: http://www.fleiner.com/vim/syntax/java.vim 5" Last Change: 2009 Mar 14 6 7" Please check :help java.vim for comments on some of the options available. 8 9" Quit when a syntax file was already loaded 10if !exists("main_syntax") 11 if version < 600 12 syntax clear 13 elseif exists("b:current_syntax") 14 finish 15 endif 16 " we define it here so that included files can test for it 17 let main_syntax='java' 18 syn region javaFold start="{" end="}" transparent fold 19endif 20 21" don't use standard HiLink, it will not work with included syntax files 22if version < 508 23 command! -nargs=+ JavaHiLink hi link <args> 24else 25 command! -nargs=+ JavaHiLink hi def link <args> 26endif 27 28" some characters that cannot be in a java program (outside a string) 29syn match javaError "[\\@`]" 30syn match javaError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/" 31syn match javaOK "\.\.\." 32 33" use separate name so that it can be deleted in javacc.vim 34syn match javaError2 "#\|=<" 35JavaHiLink javaError2 javaError 36 37 38 39" keyword definitions 40syn keyword javaExternal native package 41syn match javaExternal "\<import\>\(\s\+static\>\)\?" 42syn keyword javaError goto const 43syn keyword javaConditional if else switch 44syn keyword javaRepeat while for do 45syn keyword javaBoolean true false 46syn keyword javaConstant null 47syn keyword javaTypedef this super 48syn keyword javaOperator new instanceof 49syn keyword javaType boolean char byte short int long float double 50syn keyword javaType void 51syn keyword javaStatement return 52syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable 53syn keyword javaExceptions throw try catch finally 54syn keyword javaAssert assert 55syn keyword javaMethodDecl synchronized throws 56syn keyword javaClassDecl extends implements interface 57" to differentiate the keyword class from MyClass.class we use a match here 58syn match javaTypedef "\.\s*\<class\>"ms=s+1 59syn keyword javaClassDecl enum 60syn match javaClassDecl "^class\>" 61syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1 62syn match javaAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>" 63syn match javaClassDecl "@interface\>" 64syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite 65syn match javaUserLabelRef "\k\+" contained 66syn match javaVarArg "\.\.\." 67syn keyword javaScopeDecl public protected private abstract 68 69if exists("java_highlight_java_lang_ids") 70 let java_highlight_all=1 71endif 72if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang") 73 " java.lang.* 74 syn match javaLangClass "\<System\>" 75 syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException 76 syn cluster javaTop add=javaR_JavaLang 77 syn cluster javaClasses add=javaR_JavaLang 78 JavaHiLink javaR_JavaLang javaR_Java 79 syn keyword javaC_JavaLang Process RuntimePermission StringKeySet CharacterData01 Class ThreadLocal ThreadLocalMap CharacterData0E Package Character StringCoding Long ProcessImpl ProcessEnvironment Short AssertionStatusDirectives 1PackageInfoProxy UnicodeBlock InheritableThreadLocal AbstractStringBuilder StringEnvironment ClassLoader ConditionalSpecialCasing CharacterDataPrivateUse StringBuffer StringDecoder Entry StringEntry WrappedHook StringBuilder StrictMath State ThreadGroup Runtime CharacterData02 MethodArray Object CharacterDataUndefined Integer Gate Boolean Enum Variable Subset StringEncoder Void Terminator CharsetSD IntegerCache CharacterCache Byte CharsetSE Thread SystemClassLoaderAction CharacterDataLatin1 StringValues StackTraceElement Shutdown ShortCache String ConverterSD ByteCache Lock EnclosingMethodInfo Math Float Value Double SecurityManager LongCache ProcessBuilder StringEntrySet Compiler Number UNIXProcess ConverterSE ExternalData CaseInsensitiveComparator CharacterData00 NativeLibrary 80 syn cluster javaTop add=javaC_JavaLang 81 syn cluster javaClasses add=javaC_JavaLang 82 JavaHiLink javaC_JavaLang javaC_Java 83 syn keyword javaE_JavaLang IncompatibleClassChangeError InternalError UnknownError ClassCircularityError AssertionError ThreadDeath IllegalAccessError NoClassDefFoundError ClassFormatError UnsupportedClassVersionError NoSuchFieldError VerifyError ExceptionInInitializerError InstantiationError LinkageError NoSuchMethodError Error UnsatisfiedLinkError StackOverflowError AbstractMethodError VirtualMachineError OutOfMemoryError 84 syn cluster javaTop add=javaE_JavaLang 85 syn cluster javaClasses add=javaE_JavaLang 86 JavaHiLink javaE_JavaLang javaE_Java 87 syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException 88 syn cluster javaTop add=javaX_JavaLang 89 syn cluster javaClasses add=javaX_JavaLang 90 JavaHiLink javaX_JavaLang javaX_Java 91 92 JavaHiLink javaR_Java javaR_ 93 JavaHiLink javaC_Java javaC_ 94 JavaHiLink javaE_Java javaE_ 95 JavaHiLink javaX_Java javaX_ 96 JavaHiLink javaX_ javaExceptions 97 JavaHiLink javaR_ javaExceptions 98 JavaHiLink javaE_ javaExceptions 99 JavaHiLink javaC_ javaConstant 100 101 syn keyword javaLangObject clone equals finalize getClass hashCode 102 syn keyword javaLangObject notify notifyAll toString wait 103 JavaHiLink javaLangObject javaConstant 104 syn cluster javaTop add=javaLangObject 105endif 106 107if filereadable(expand("<sfile>:p:h")."/javaid.vim") 108 source <sfile>:p:h/javaid.vim 109endif 110 111if exists("java_space_errors") 112 if !exists("java_no_trail_space_error") 113 syn match javaSpaceError "\s\+$" 114 endif 115 if !exists("java_no_tab_space_error") 116 syn match javaSpaceError " \+\t"me=e-1 117 endif 118endif 119 120syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter 121syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel 122syn keyword javaLabel default 123 124if !exists("java_allow_cpp_keywords") 125 syn keyword javaError auto delete extern friend inline redeclared 126 syn keyword javaError register signed sizeof struct template typedef union 127 syn keyword javaError unsigned operator 128endif 129 130" The following cluster contains all java groups except the contained ones 131syn cluster javaTop add=javaExternal,javaError,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaClassDecl,javaClassDecl,javaScopeDecl,javaError,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg 132 133 134" Comments 135syn keyword javaTodo contained TODO FIXME XXX 136if exists("java_comment_strings") 137 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell 138 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell 139 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar 140 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar 141 syn match javaCommentCharacter contained "'[^\\]'" 142 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber 143 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber 144endif 145syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell 146syn match javaCommentStar contained "^\s*\*[^/]"me=e-1 147syn match javaCommentStar contained "^\s*\*$" 148syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell 149JavaHiLink javaCommentString javaString 150JavaHiLink javaComment2String javaString 151JavaHiLink javaCommentCharacter javaCharacter 152 153syn cluster javaTop add=javaComment,javaLineComment 154 155if !exists("java_ignore_javadoc") && main_syntax != 'jsp' 156 syntax case ignore 157 " syntax coloring for javadoc comments (HTML) 158 syntax include @javaHtml <sfile>:p:h/html.vim 159 unlet b:current_syntax 160 " HTML enables spell checking for all text that is not in a syntax item. This 161 " is wrong for Java (all identifiers would be spell-checked), so it's undone 162 " here. 163 syntax spell default 164 165 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell 166 syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag 167 168 syn region javaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" 169 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam 170 syn match javaDocParam contained "\s\S\+" 171 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>" 172 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam 173 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend 174 syntax case match 175endif 176 177" match the special comment /**/ 178syn match javaComment "/\*\*/" 179 180" Strings and constants 181syn match javaSpecialError contained "\\." 182syn match javaSpecialCharError contained "[^']" 183syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\+\x\{4\}\)" 184syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell 185" next line disabled, it can cause a crash for a long line 186"syn match javaStringError +"\([^"\\]\|\\.\)*$+ 187syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError 188syn match javaCharacter "'\\''" contains=javaSpecialChar 189syn match javaCharacter "'[^\\]'" 190syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 191syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 192syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 193syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 194 195" unicode characters 196syn match javaSpecial "\\u\+\d\{4\}" 197 198syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError 199 200if exists("java_highlight_functions") 201 if java_highlight_functions == "indent" 202 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 203 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 204 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 205 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 206 else 207 " This line catches method declarations at any indentation>0, but it assumes 208 " two things: 209 " 1. class names are always capitalized (ie: Button) 210 " 2. method names are never capitalized (except constructors, of course) 211 syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses 212 endif 213 syn match javaBraces "[{}]" 214 syn cluster javaTop add=javaFuncDef,javaBraces 215endif 216 217if exists("java_highlight_debug") 218 219 " Strings and constants 220 syn match javaDebugSpecial contained "\\\d\d\d\|\\." 221 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial 222 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+ 223 syn match javaDebugCharacter contained "'[^\\]'" 224 syn match javaDebugSpecialCharacter contained "'\\.'" 225 syn match javaDebugSpecialCharacter contained "'\\''" 226 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 227 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 228 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 229 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 230 syn keyword javaDebugBoolean contained true false 231 syn keyword javaDebugType contained null this super 232 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen 233 234 " to make this work you must define the highlighting for these groups 235 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 236 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 237 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 238 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 239 240 syn cluster javaTop add=javaDebug 241 242 if version >= 508 || !exists("did_c_syn_inits") 243 JavaHiLink javaDebug Debug 244 JavaHiLink javaDebugString DebugString 245 JavaHiLink javaDebugStringError javaError 246 JavaHiLink javaDebugType DebugType 247 JavaHiLink javaDebugBoolean DebugBoolean 248 JavaHiLink javaDebugNumber Debug 249 JavaHiLink javaDebugSpecial DebugSpecial 250 JavaHiLink javaDebugSpecialCharacter DebugSpecial 251 JavaHiLink javaDebugCharacter DebugString 252 JavaHiLink javaDebugParen Debug 253 254 JavaHiLink DebugString String 255 JavaHiLink DebugSpecial Special 256 JavaHiLink DebugBoolean Boolean 257 JavaHiLink DebugType Type 258 endif 259endif 260 261if exists("java_mark_braces_in_parens_as_errors") 262 syn match javaInParen contained "[{}]" 263 JavaHiLink javaInParen javaError 264 syn cluster javaTop add=javaInParen 265endif 266 267" catch errors caused by wrong parenthesis 268syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1 269syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained 270syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained 271syn match javaParenError ")" 272" catch errors caused by wrong square parenthesis 273syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1 274syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained 275syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained 276syn match javaParenError "\]" 277 278JavaHiLink javaParenError javaError 279 280if !exists("java_minlines") 281 let java_minlines = 10 282endif 283exec "syn sync ccomment javaComment minlines=" . java_minlines 284 285" The default highlighting. 286if version >= 508 || !exists("did_java_syn_inits") 287 if version < 508 288 let did_java_syn_inits = 1 289 endif 290 JavaHiLink javaFuncDef Function 291 JavaHiLink javaVarArg Function 292 JavaHiLink javaBraces Function 293 JavaHiLink javaBranch Conditional 294 JavaHiLink javaUserLabelRef javaUserLabel 295 JavaHiLink javaLabel Label 296 JavaHiLink javaUserLabel Label 297 JavaHiLink javaConditional Conditional 298 JavaHiLink javaRepeat Repeat 299 JavaHiLink javaExceptions Exception 300 JavaHiLink javaAssert Statement 301 JavaHiLink javaStorageClass StorageClass 302 JavaHiLink javaMethodDecl javaStorageClass 303 JavaHiLink javaClassDecl javaStorageClass 304 JavaHiLink javaScopeDecl javaStorageClass 305 JavaHiLink javaBoolean Boolean 306 JavaHiLink javaSpecial Special 307 JavaHiLink javaSpecialError Error 308 JavaHiLink javaSpecialCharError Error 309 JavaHiLink javaString String 310 JavaHiLink javaCharacter Character 311 JavaHiLink javaSpecialChar SpecialChar 312 JavaHiLink javaNumber Number 313 JavaHiLink javaError Error 314 JavaHiLink javaStringError Error 315 JavaHiLink javaStatement Statement 316 JavaHiLink javaOperator Operator 317 JavaHiLink javaComment Comment 318 JavaHiLink javaDocComment Comment 319 JavaHiLink javaLineComment Comment 320 JavaHiLink javaConstant Constant 321 JavaHiLink javaTypedef Typedef 322 JavaHiLink javaTodo Todo 323 JavaHiLink javaAnnotation PreProc 324 325 JavaHiLink javaCommentTitle SpecialComment 326 JavaHiLink javaDocTags Special 327 JavaHiLink javaDocParam Function 328 JavaHiLink javaDocSeeTagParam Function 329 JavaHiLink javaCommentStar javaComment 330 331 JavaHiLink javaType Type 332 JavaHiLink javaExternal Include 333 334 JavaHiLink htmlComment Special 335 JavaHiLink htmlCommentPart Special 336 JavaHiLink javaSpaceError Error 337endif 338 339delcommand JavaHiLink 340 341let b:current_syntax = "java" 342 343if main_syntax == 'java' 344 unlet main_syntax 345endif 346 347let b:spell_options="contained" 348 349" vim: ts=8 350