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: 2012 Oct 05 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]*\>" 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 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[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 192syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 193syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 194syn match javaNumber "\<\d\+\([eE][-+]\=\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 204 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 205 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 206 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 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 endif 214 syn match javaBraces "[{}]" 215 syn cluster javaTop add=javaFuncDef,javaBraces 216endif 217 218if exists("java_highlight_debug") 219 220 " Strings and constants 221 syn match javaDebugSpecial contained "\\\d\d\d\|\\." 222 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial 223 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+ 224 syn match javaDebugCharacter contained "'[^\\]'" 225 syn match javaDebugSpecialCharacter contained "'\\.'" 226 syn match javaDebugSpecialCharacter contained "'\\''" 227 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 228 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 229 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 230 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 231 syn keyword javaDebugBoolean contained true false 232 syn keyword javaDebugType contained null this super 233 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen 234 235 " to make this work you must define the highlighting for these groups 236 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 237 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 238 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 239 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 240 241 syn cluster javaTop add=javaDebug 242 243 if version >= 508 || !exists("did_c_syn_inits") 244 JavaHiLink javaDebug Debug 245 JavaHiLink javaDebugString DebugString 246 JavaHiLink javaDebugStringError javaError 247 JavaHiLink javaDebugType DebugType 248 JavaHiLink javaDebugBoolean DebugBoolean 249 JavaHiLink javaDebugNumber Debug 250 JavaHiLink javaDebugSpecial DebugSpecial 251 JavaHiLink javaDebugSpecialCharacter DebugSpecial 252 JavaHiLink javaDebugCharacter DebugString 253 JavaHiLink javaDebugParen Debug 254 255 JavaHiLink DebugString String 256 JavaHiLink DebugSpecial Special 257 JavaHiLink DebugBoolean Boolean 258 JavaHiLink DebugType Type 259 endif 260endif 261 262if exists("java_mark_braces_in_parens_as_errors") 263 syn match javaInParen contained "[{}]" 264 JavaHiLink javaInParen javaError 265 syn cluster javaTop add=javaInParen 266endif 267 268" catch errors caused by wrong parenthesis 269syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1 270syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained 271syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained 272syn match javaParenError ")" 273" catch errors caused by wrong square parenthesis 274syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1 275syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained 276syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained 277syn match javaParenError "\]" 278 279JavaHiLink javaParenError javaError 280 281if !exists("java_minlines") 282 let java_minlines = 10 283endif 284exec "syn sync ccomment javaComment minlines=" . java_minlines 285 286" The default highlighting. 287if version >= 508 || !exists("did_java_syn_inits") 288 if version < 508 289 let did_java_syn_inits = 1 290 endif 291 JavaHiLink javaFuncDef Function 292 JavaHiLink javaVarArg Function 293 JavaHiLink javaBraces Function 294 JavaHiLink javaBranch Conditional 295 JavaHiLink javaUserLabelRef javaUserLabel 296 JavaHiLink javaLabel Label 297 JavaHiLink javaUserLabel Label 298 JavaHiLink javaConditional Conditional 299 JavaHiLink javaRepeat Repeat 300 JavaHiLink javaExceptions Exception 301 JavaHiLink javaAssert Statement 302 JavaHiLink javaStorageClass StorageClass 303 JavaHiLink javaMethodDecl javaStorageClass 304 JavaHiLink javaClassDecl javaStorageClass 305 JavaHiLink javaScopeDecl javaStorageClass 306 JavaHiLink javaBoolean Boolean 307 JavaHiLink javaSpecial Special 308 JavaHiLink javaSpecialError Error 309 JavaHiLink javaSpecialCharError Error 310 JavaHiLink javaString String 311 JavaHiLink javaCharacter Character 312 JavaHiLink javaSpecialChar SpecialChar 313 JavaHiLink javaNumber Number 314 JavaHiLink javaError Error 315 JavaHiLink javaStringError Error 316 JavaHiLink javaStatement Statement 317 JavaHiLink javaOperator Operator 318 JavaHiLink javaComment Comment 319 JavaHiLink javaDocComment Comment 320 JavaHiLink javaLineComment Comment 321 JavaHiLink javaConstant Constant 322 JavaHiLink javaTypedef Typedef 323 JavaHiLink javaTodo Todo 324 JavaHiLink javaAnnotation PreProc 325 326 JavaHiLink javaCommentTitle SpecialComment 327 JavaHiLink javaDocTags Special 328 JavaHiLink javaDocParam Function 329 JavaHiLink javaDocSeeTagParam Function 330 JavaHiLink javaCommentStar javaComment 331 332 JavaHiLink javaType Type 333 JavaHiLink javaExternal Include 334 335 JavaHiLink htmlComment Special 336 JavaHiLink htmlCommentPart Special 337 JavaHiLink javaSpaceError Error 338endif 339 340delcommand JavaHiLink 341 342let b:current_syntax = "java" 343 344if main_syntax == 'java' 345 unlet main_syntax 346endif 347 348let b:spell_options="contained" 349let &cpo = s:cpo_save 350unlet s:cpo_save 351 352" vim: ts=8 353