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