" Vim syntax file " Language: Objective C " Maintainer: Kazunobu Kuriyama " Ex-maintainer: Anthony Hodsdon " First Author: Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de> " Last Change: 2007 Feb 21 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 syntax clear elseif exists("b:current_syntax") finish endif if &filetype != 'objcpp' " Read the C syntax to start with if version < 600 source :p:h/c.vim else runtime! syntax/c.vim endif endif " Objective C extentions follow below " " NOTE: Objective C is abbreviated to ObjC/objc " and uses *.h, *.m as file extensions! " ObjC keywords, types, type qualifiers etc. syn keyword objcStatement self super _cmd syn keyword objcType id Class SEL IMP BOOL objc_property_t Ivar syn keyword objcType nonnull nullable null_unspecified syn keyword objcTypeModifier bycopy in out inout oneway OF_GENERIC OF_INLINE syn keyword objcTypeModifier OF_KINDOF OF_CONST_FUNC OF_NO_RETURN syn keyword objcTypeModifier OF_RETURNS_INNER_POINTER OF_NULLABLE_PROPERTY syn keyword objcTypeModifier OF_NULL_RESETTABLE_PROPERTY OF_UNAVAILABLE syn keyword objcTypeModifier OF_DESIGNATED_INITIALIZER OF_METHOD_FAMILY syn keyword objcTypeModifier OF_REQUIRES_SUPER OF_ALIGN OF_ALIGNOF OF_ALIGNAS syn keyword objcTypeModifier OF_SENTINEL OF_SUBCLASSING_RESTRICTED syn keyword objcTypeModifier OF_DIRECT OF_DIRECT_MEMBERS syn keyword objcTypeModifier _Nonnull _Nullable _Null_unspecified __kindof syn keyword objcConstant nil Nil OFNotFound " Match the ObjC #import directive (like C's #include) syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ syn match objcImported display contained "<[-_0-9a-zA-Z.\/]*>" syn match objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported " Match the important ObjC directives syn match objcScopeDecl "@public\|@private\|@protected" syn match objcDirective "@interface\|@implementation" syn match objcDirective "@class\|@end\|@defs" syn match objcDirective "@encode\|@protocol\|@selector" syn match objcDirective "@try\|@catch\|@finally\|@throw\|@synchronized" syn match objcDirective "OF_ASSUME_NONNULL_BEGIN\|OF_ASSUME_NONNULL_END" " Match the ObjC method types " " NOTE: here I match only the indicators, this looks " much nicer and reduces cluttering color highlightings. " However, if you prefer full method declaration matching " append .* at the end of the next two patterns! " syn match objcInstMethod "^\s*-\s*" syn match objcFactMethod "^\s*+\s*" " To distinguish from a header inclusion from a protocol list. syn match objcProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objcType,cType,Type " To distinguish labels from the keyword for a method's parameter. syn region objcKeyForMethodParam display \ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*(" \ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*" \ contains=objcType,objcTypeModifier,cType,cStructure,cStorageClass,Type " Objective-C Constant Strings syn match objcSpecial display "%@" contained syn region objcString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial " Objective-C Message Expressions syn 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 syn cluster cParenGroup add=objcMessage syn cluster cPreProcGroup add=objcMessage " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet if version >= 508 || !exists("did_objc_syntax_inits") if version < 508 let did_objc_syntax_inits = 1 command -nargs=+ HiLink hi link else command -nargs=+ HiLink hi def link endif HiLink objcImport Include HiLink objcImported cString HiLink objcTypeModifier objcType HiLink objcType Type HiLink objcScopeDecl Statement HiLink objcInstMethod Function HiLink objcFactMethod Function HiLink objcStatement Statement HiLink objcDirective Statement HiLink objcKeyForMethodParam None HiLink objcString cString HiLink objcSpecial Special HiLink objcProtocol None HiLink objcConstant cConstant delcommand HiLink endif let b:current_syntax = "objc" " vim: ts=8 " Author: Michael Sanders (msanders42 [at] gmail [dot] com) " Some modifications by Jonathan Schleifer " Description: Better syntax highlighting for Objective-C files (part of the " cocoa.vim plugin). " Last Updated: May 3, 2015 syn match objcDirective '@synthesize\|@dynamic\|@property' display syn match objcDirective '@optional\|@required\|@autoreleasepool' display syn keyword objcType IBOutlet IBAction Method __block instancetype syn keyword objcType __unsafe_unretained __bridge __bridge_retained __bridge_transfer __autoreleasing __strong __weak syn keyword objcType OFUnichar OFChar16 OFChar32 OFComparisonResult syn keyword objcType OFComparator OFByteOrder OFRange OFPoint OFRect OFSize syn keyword objcType OFVector3D OFVector4D syn keyword objcType OFPlainMutex OFPlainRecursiveMutex syn keyword objcType OFStringEncoding OFTimeInterval syn keyword objcType OFResolverResult OFStreamOffset OFSeekWhence syn keyword objcType OFPlainCondition OFSocketHandle OFSpinlock OFTLSKey syn keyword objcType OFPlainThread OFOptionsParserOption OFHTTPRequestMethod syn keyword objcType OFHTTPRequestProtocolVersion OFSocketAddress syn keyword objcType OFFileAttributeKey OFFileType OFFileAttributes syn keyword objcType OFMutableFileAttributes OFNotificationName syn keyword objcConstant YES NO TRUE FALSE syn region objcImp start='@implementation' end='@end' transparent syn region objcHeader start='@interface' end='@end' transparent syn match objcSubclass '\(@implementation\|@interface\)\@<=\s*\k\+' display contained containedin=objcImp,objcHeader syn match objcSuperclass '\(@\(implementation\|interface\)\s*\k\+\s*:\)\@<=\s*\k*' display contained containedin=objcImp,objcHeader " Matches "bar" in "[NSObject bar]" or "bar" in "[[NSObject foo: baz] bar]", " but NOT "bar" in "[NSObject foo: bar]". syn match objcMessageName '\%#=1\(\[\s*\k\+\s\+\|\]\s*\)\@<=\k*\s*\]'me=e-1 display contained containedin=objcMessage " Matches "foo:" in "[NSObject foo: bar]" or "[[NSObject new] foo: bar]" syn match objcMessageColon '\(\_\S\+\_\s\+\)\@<=\k\+\s*:' display contained containedin=objcMessage " Matches "foo:" in above syn match objcMessageArg ')\@<=\s*\k\+' contained containedin=objcMessage " Don't match these in this strange group for edge cases... syn cluster cMultiGroup add=objcMessageColon,objcMessageName hi link objcMessageArg Identifier hi link objcMessageName objcMessageArg hi link objcMessageColon objcMessageName hi link objcMessageReceiver Special hi link objcSubclass objcMethodName hi link objcSuperclass String hi link objcError Error