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