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: 2007 Dec 21 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 " The default used to be to highlight C++ keywords. But several people 125 " don't like that, so default to not highlighting these. 126 let java_allow_cpp_keywords = 1 127endif 128if !java_allow_cpp_keywords 129 syn keyword javaError auto delete extern friend inline redeclared 130 syn keyword javaError register signed sizeof struct template typedef union 131 syn keyword javaError unsigned operator 132endif 133 134" The following cluster contains all java groups except the contained ones 135syn 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 136 137 138" Comments 139syn keyword javaTodo contained TODO FIXME XXX 140if exists("java_comment_strings") 141 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell 142 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell 143 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar 144 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar 145 syn match javaCommentCharacter contained "'[^\\]'" 146 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber 147 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber 148endif 149syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell 150syn match javaCommentStar contained "^\s*\*[^/]"me=e-1 151syn match javaCommentStar contained "^\s*\*$" 152syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell 153JavaHiLink javaCommentString javaString 154JavaHiLink javaComment2String javaString 155JavaHiLink javaCommentCharacter javaCharacter 156 157syn cluster javaTop add=javaComment,javaLineComment 158 159if !exists("java_ignore_javadoc") && main_syntax != 'jsp' 160 syntax case ignore 161 " syntax coloring for javadoc comments (HTML) 162 syntax include @javaHtml <sfile>:p:h/html.vim 163 unlet b:current_syntax 164 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell 165 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 166 167 syn region javaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" 168 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam 169 syn match javaDocParam contained "\s\S\+" 170 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>" 171 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam 172 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend 173 syntax case match 174endif 175 176" match the special comment /**/ 177syn match javaComment "/\*\*/" 178 179" Strings and constants 180syn match javaSpecialError contained "\\." 181syn match javaSpecialCharError contained "[^']" 182syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)" 183syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell 184" next line disabled, it can cause a crash for a long line 185"syn match javaStringError +"\([^"\\]\|\\.\)*$+ 186syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError 187syn match javaCharacter "'\\''" contains=javaSpecialChar 188syn match javaCharacter "'[^\\]'" 189syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 190syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 191syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 192syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 193 194" unicode characters 195syn match javaSpecial "\\u\d\{4\}" 196 197syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError 198 199if exists("java_highlight_functions") 200 if java_highlight_functions == "indent" 201 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 202 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 203 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 204 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses 205 else 206 " This line catches method declarations at any indentation>0, but it assumes 207 " two things: 208 " 1. class names are always capitalized (ie: Button) 209 " 2. method names are never capitalized (except constructors, of course) 210 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 211 endif 212 syn match javaBraces "[{}]" 213 syn cluster javaTop add=javaFuncDef,javaBraces 214endif 215 216if exists("java_highlight_debug") 217 218 " Strings and constants 219 syn match javaDebugSpecial contained "\\\d\d\d\|\\." 220 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial 221 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+ 222 syn match javaDebugCharacter contained "'[^\\]'" 223 syn match javaDebugSpecialCharacter contained "'\\.'" 224 syn match javaDebugSpecialCharacter contained "'\\''" 225 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 226 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 227 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 228 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 229 syn keyword javaDebugBoolean contained true false 230 syn keyword javaDebugType contained null this super 231 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen 232 233 " to make this work you must define the highlighting for these groups 234 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 235 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 236 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 237 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 238 239 syn cluster javaTop add=javaDebug 240 241 if version >= 508 || !exists("did_c_syn_inits") 242 JavaHiLink javaDebug Debug 243 JavaHiLink javaDebugString DebugString 244 JavaHiLink javaDebugStringError javaError 245 JavaHiLink javaDebugType DebugType 246 JavaHiLink javaDebugBoolean DebugBoolean 247 JavaHiLink javaDebugNumber Debug 248 JavaHiLink javaDebugSpecial DebugSpecial 249 JavaHiLink javaDebugSpecialCharacter DebugSpecial 250 JavaHiLink javaDebugCharacter DebugString 251 JavaHiLink javaDebugParen Debug 252 253 JavaHiLink DebugString String 254 JavaHiLink DebugSpecial Special 255 JavaHiLink DebugBoolean Boolean 256 JavaHiLink DebugType Type 257 endif 258endif 259 260if exists("java_mark_braces_in_parens_as_errors") 261 syn match javaInParen contained "[{}]" 262 JavaHiLink javaInParen javaError 263 syn cluster javaTop add=javaInParen 264endif 265 266" catch errors caused by wrong 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" catch errors caused by wrong square parenthesis 272syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1 273syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained 274syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained 275syn match javaParenError "\]" 276 277JavaHiLink javaParenError javaError 278 279if !exists("java_minlines") 280 let java_minlines = 10 281endif 282exec "syn sync ccomment javaComment minlines=" . java_minlines 283 284" The default highlighting. 285if version >= 508 || !exists("did_java_syn_inits") 286 if version < 508 287 let did_java_syn_inits = 1 288 endif 289 JavaHiLink javaFuncDef Function 290 JavaHiLink javaVarArg Function 291 JavaHiLink javaBraces Function 292 JavaHiLink javaBranch Conditional 293 JavaHiLink javaUserLabelRef javaUserLabel 294 JavaHiLink javaLabel Label 295 JavaHiLink javaUserLabel Label 296 JavaHiLink javaConditional Conditional 297 JavaHiLink javaRepeat Repeat 298 JavaHiLink javaExceptions Exception 299 JavaHiLink javaAssert Statement 300 JavaHiLink javaStorageClass StorageClass 301 JavaHiLink javaMethodDecl javaStorageClass 302 JavaHiLink javaClassDecl javaStorageClass 303 JavaHiLink javaScopeDecl javaStorageClass 304 JavaHiLink javaBoolean Boolean 305 JavaHiLink javaSpecial Special 306 JavaHiLink javaSpecialError Error 307 JavaHiLink javaSpecialCharError Error 308 JavaHiLink javaString String 309 JavaHiLink javaCharacter Character 310 JavaHiLink javaSpecialChar SpecialChar 311 JavaHiLink javaNumber Number 312 JavaHiLink javaError Error 313 JavaHiLink javaStringError Error 314 JavaHiLink javaStatement Statement 315 JavaHiLink javaOperator Operator 316 JavaHiLink javaComment Comment 317 JavaHiLink javaDocComment Comment 318 JavaHiLink javaLineComment Comment 319 JavaHiLink javaConstant Constant 320 JavaHiLink javaTypedef Typedef 321 JavaHiLink javaTodo Todo 322 JavaHiLink javaAnnotation PreProc 323 324 JavaHiLink javaCommentTitle SpecialComment 325 JavaHiLink javaDocTags Special 326 JavaHiLink javaDocParam Function 327 JavaHiLink javaDocSeeTagParam Function 328 JavaHiLink javaCommentStar javaComment 329 330 JavaHiLink javaType Type 331 JavaHiLink javaExternal Include 332 333 JavaHiLink htmlComment Special 334 JavaHiLink htmlCommentPart Special 335 JavaHiLink javaSpaceError Error 336endif 337 338delcommand JavaHiLink 339 340let b:current_syntax = "java" 341 342if main_syntax == 'java' 343 unlet main_syntax 344endif 345 346let b:spell_options="contained" 347 348" vim: ts=8 349