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