1" Vim syntax file 2" Language: Objective C 3" Maintainer: Kazunobu Kuriyama <[email protected]> 4" Ex-maintainer: Anthony Hodsdon <[email protected]> 5" First Author: Valentino Kyriakides <[email protected]> 6" Last Change: 2013 Feb 20 7" 8" 2013 Feb 19 Revised based on a patch sent to the maintainer by 9" Christos Kontas <[email protected]> on 2012 Dec 12. 10 11" For version 5.x: Clear all syntax items 12" For version 6.x: Quit when a syntax file was already loaded 13if version < 600 14 syntax clear 15elseif exists("b:current_syntax") 16 finish 17endif 18let s:keepcpo= &cpo 19set cpo&vim 20 21if &filetype != 'objcpp' 22 " Read the C syntax to start with 23 if version < 600 24 source <sfile>:p:h/c.vim 25 else 26 runtime! syntax/c.vim 27 endif 28endif 29 30" Objective C extentions follow below 31" 32" NOTE: Objective C is abbreviated to ObjC/objc 33" and uses *.h, *.m as file extensions! 34 35 36" ObjC keywords, types, type qualifiers etc. 37syn keyword objcStatement self super _cmd 38syn keyword objcType id Class SEL IMP BOOL 39syn keyword objcTypeModifier bycopy in out inout oneway 40syn keyword objcConstant nil Nil 41 42" Match the ObjC #import directive (like C's #include) 43syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ 44syn match objcImported display contained "<[-_0-9a-zA-Z.\/]*>" 45syn match objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported 46 47" Match the important ObjC directives 48syn match objcScopeDecl "@public\|@private\|@protected" 49syn match objcDirective "@interface\|@implementation" 50syn match objcDirective "@class\|@end\|@defs" 51syn match objcDirective "@encode\|@protocol\|@selector" 52syn match objcDirective "@try\|@catch\|@finally\|@throw\|@synchronized" 53 54 " New directives introduced with Objc-2.0 55syn match objcDirective "@property\|@synthesize\|@dynamic" 56syn match objcDirective "@optional\|@required" 57syn match objcDirective "@autoreleasepool" 58 59" Match the ObjC method types 60" 61" NOTE: here I match only the indicators, this looks 62" much nicer and reduces cluttering color highlightings. 63" However, if you prefer full method declaration matching 64" append .* at the end of the next two patterns! 65" 66syn match objcInstMethod "^\s*-\s*" 67syn match objcFactMethod "^\s*+\s*" 68 69" To distinguish from a header inclusion from a protocol list. 70syn match objcProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objcType,cType,Type 71 72 73" To distinguish labels from the keyword for a method's parameter. 74syn region objcKeyForMethodParam display 75 \ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*(" 76 \ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*" 77 \ contains=objcType,objcTypeModifier,cType,cStructure,cStorageClass,Type 78 79" Objective-C Constant Strings 80syn match objcSpecial display "%@" contained 81syn region objcString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial 82 83" Objective-C Message Expressions 84syn region objcMessage display start="\[" end="\]" contains=objcMessage,objcStatement,objcType,objcTypeModifier,objcString,objcConstant,objcDirective,cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,Type 85 86syn cluster cParenGroup add=objcMessage 87syn cluster cPreProcGroup add=objcMessage 88 89" Define the default highlighting. 90" For version 5.7 and earlier: only when not done already 91" For version 5.8 and later: only when an item doesn't have highlighting yet 92if version >= 508 || !exists("did_objc_syntax_inits") 93 if version < 508 94 let did_objc_syntax_inits = 1 95 command -nargs=+ HiLink hi link <args> 96 else 97 command -nargs=+ HiLink hi def link <args> 98 endif 99 100 HiLink objcImport Include 101 HiLink objcImported cString 102 HiLink objcTypeModifier objcType 103 HiLink objcType Type 104 HiLink objcScopeDecl Statement 105 HiLink objcInstMethod Function 106 HiLink objcFactMethod Function 107 HiLink objcStatement Statement 108 HiLink objcDirective Statement 109 HiLink objcKeyForMethodParam None 110 HiLink objcString cString 111 HiLink objcSpecial Special 112 HiLink objcProtocol None 113 HiLink objcConstant cConstant 114 115 delcommand HiLink 116endif 117 118let b:current_syntax = "objc" 119 120let &cpo = s:keepcpo 121unlet s:keepcpo 122 123" vim: ts=8 124