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