1" Vim syntax file 2" Language: Perl 5 3" Maintainer: vim-perl <[email protected]> 4" Homepage: https://github.com/vim-perl/vim-perl/tree/master 5" Bugs/requests: https://github.com/vim-perl/vim-perl/issues 6" Last Change: 2020 Apr 15 7" Contributors: Andy Lester <[email protected]> 8" Hinrik Örn Sigurðsson <[email protected]> 9" Lukas Mai <l.mai.web.de> 10" Nick Hibma <[email protected]> 11" Sonia Heimann <[email protected]> 12" Rob Hoelz <[email protected]> 13" and many others. 14" 15" Please download the most recent version first, before mailing 16" any comments. 17" 18" The following parameters are available for tuning the 19" perl syntax highlighting, with defaults given: 20" 21" let perl_include_pod = 1 22" unlet perl_no_scope_in_variables 23" unlet perl_no_extended_vars 24" unlet perl_string_as_statement 25" unlet perl_no_sync_on_sub 26" unlet perl_no_sync_on_global_var 27" let perl_sync_dist = 100 28" unlet perl_fold 29" unlet perl_fold_blocks 30" unlet perl_nofold_packages 31" unlet perl_nofold_subs 32" unlet perl_fold_anonymous_subs 33" unlet perl_no_subprototype_error 34 35if exists("b:current_syntax") 36 finish 37endif 38 39let s:cpo_save = &cpo 40set cpo&vim 41 42" POD starts with ^=<word> and ends with ^=cut 43 44if !exists("perl_include_pod") || perl_include_pod == 1 45 " Include a while extra syntax file 46 syn include @Pod syntax/pod.vim 47 unlet b:current_syntax 48 if exists("perl_fold") 49 syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend 50 syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend 51 else 52 syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend 53 syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend 54 endif 55else 56 " Use only the bare minimum of rules 57 if exists("perl_fold") 58 syn region perlPOD start="^=[a-z]" end="^=cut" fold 59 else 60 syn region perlPOD start="^=[a-z]" end="^=cut" 61 endif 62endif 63 64 65syn cluster perlTop contains=TOP 66 67syn region perlBraces start="{" end="}" transparent extend 68 69" All keywords 70" 71syn match perlConditional "\<\%(if\|elsif\|unless\|given\|when\|default\)\>" 72syn match perlConditional "\<else\%(\%(\_s\*if\>\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty 73syn match perlRepeat "\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>" 74syn match perlOperator "\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>" 75" for some reason, adding this as the nextgroup for perlControl fixes BEGIN 76" folding issues... 77syn match perlFakeGroup "" contained 78syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup 79 80syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>" 81syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>" 82syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|fc\|uc\%(first\)\=\)\>" 83syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>" 84syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>" 85syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>" 86syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>" 87syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>" 88syn match perlStatementFiledesc "\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite 89syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite 90syn match perlStatementVector "\<vec\>" 91syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>" 92syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>" 93syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\|evalbytes\)\>" 94syn match perlStatementInclude "\<\%(require\|import\|unimport\)\>" 95syn match perlStatementInclude "\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autodie\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|diagnostics\|encoding\%(::warnings\)\=\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|open\|ops\|overload\|overloading\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\=" 96syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>" 97syn match perlStatementSocket "\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>" 98syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>" 99syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>" 100syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>" 101syn match perlStatementTime "\<\%(gmtime\|localtime\|time\)\>" 102 103syn match perlStatementMisc "\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>" 104 105syn keyword perlTodo TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained 106 107syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\%(\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*\)\@<={" end="}" transparent extend 108 109syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!" 110 111" Perl Identifiers. 112" 113" Should be cleaned up to better handle identifiers in particular situations 114" (in hash keys for example) 115" 116" Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc. 117" We do not process complex things such as @{${"foo"}}. Too complicated, and 118" too slow. And what is after the -> is *not* considered as part of the 119" variable - there again, too complicated and too slow. 120 121" Special variables first ($^A, ...) and ($|, $', ...) 122syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\=" 123syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]" 124syn match perlVarPlain "@[-+]" 125syn match perlVarPlain "$\%(0\|[1-9]\d*\)" 126" Same as above, but avoids confusion in $::foo (equivalent to $main::foo) 127syn match perlVarPlain "$::\@!" 128" These variables are not recognized within matches. 129syn match perlVarNotInMatches "$[|)]" 130" This variable is not recognized within matches delimited by m//. 131syn match perlVarSlash "$/" 132 133" And plain identifiers 134syn match perlPackageRef "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained 135 136" To not highlight packages in variables as a scope reference - i.e. in 137" $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables" 138" If you don't want complex things like @{${"foo"}} to be processed, 139" just set the variable "perl_no_extended_vars"... 140 141if !exists("perl_no_scope_in_variables") 142 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref 143 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref 144 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref 145else 146 syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref 147 syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref 148 syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref 149endif 150 151syn match perlVarPlain2 "%[-+]" 152 153if !exists("perl_no_extended_vars") 154 syn cluster perlExpr contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlBraces 155 syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained 156 syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained 157 syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained 158 syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained 159 syn region perlArrow matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contained 160 syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend 161 syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend 162 syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend 163 syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend 164 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend 165 syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref contains=perlVarSimpleMemberName contained extend 166 syn match perlVarSimpleMemberName "\I\i*" contained 167 syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod,perlPostDeref extend 168 syn match perlPackageConst "__PACKAGE__" nextgroup=perlMethod,perlPostDeref 169 syn match perlMethod "->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref 170 syn match perlPostDeref "->\%($#\|[$@%&*]\)\*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref 171 syn region perlPostDeref start="->\%($#\|[$@%&*]\)\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref 172 syn region perlPostDeref matchgroup=perlPostDeref start="->\%($#\|[$@%&*]\){" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlMethod,perlPostDeref 173endif 174 175" File Descriptors 176syn match perlFiledescRead "<\h\w*>" 177 178syn match perlFiledescStatementComma "(\=\s*\<\u\w*\>\s*,"me=e-1 transparent contained contains=perlFiledescStatement 179syn match perlFiledescStatementNocomma "(\=\s*\<\u\w*\>\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement 180 181syn match perlFiledescStatement "\<\u\w*\>" contained 182 183" Special characters in strings and matches 184syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend 185syn match perlSpecialStringU2 "\\." extend contained contains=NONE 186syn match perlSpecialStringU "\\\\" contained 187syn match perlSpecialMatch "\\[1-9]" contained extend 188syn match perlSpecialMatch "\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained 189syn match perlSpecialMatch "\\k\%(<\h\w*>\|'\h\w*'\)" contained 190syn match perlSpecialMatch "{\d\+\%(,\%(\d\+\)\=\)\=}" contained 191syn match perlSpecialMatch "\[[]-]\=[^\[\]]*[]-]\=\]" contained extend 192syn match perlSpecialMatch "[+*()?.]" contained 193syn match perlSpecialMatch "(?[#:=!]" contained 194syn match perlSpecialMatch "(?[impsx]*\%(-[imsx]\+\)\=)" contained 195syn match perlSpecialMatch "(?\%([-+]\=\d\+\|R\))" contained 196syn match perlSpecialMatch "(?\%(&\|P[>=]\)\h\w*)" contained 197syn match perlSpecialMatch "(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained 198 199" Possible errors 200" 201" Highlight lines with only whitespace (only in blank delimited here documents) as errors 202syn match perlNotEmptyLine "^\s\+$" contained 203" Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {" 204syn match perlElseIfError "else\_s*if" containedin=perlConditional 205syn keyword perlElseIfError elseif containedin=perlConditional 206 207" Variable interpolation 208" 209" These items are interpolated inside "" strings and similar constructs. 210syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock 211" These items are interpolated inside '' strings and similar constructs. 212syn cluster perlInterpSQ contains=perlSpecialStringU,perlSpecialStringU2 213" These items are interpolated inside m// matches and s/// substitutions. 214syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock 215" These items are interpolated inside m## matches and s### substitutions. 216syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash 217 218" Shell commands 219syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend 220 221" Constants 222" 223" Numbers 224syn match perlNumber "\<\%(0\%(x\x[[:xdigit:]_]*\|b[01][01_]*\|\o[0-7_]*\|\)\|[1-9][[:digit:]_]*\)\>" 225syn match perlFloat "\<\d[[:digit:]_]*[eE][\-+]\=\d\+" 226syn match perlFloat "\<\d[[:digit:]_]*\.[[:digit:]_]*\%([eE][\-+]\=\d\+\)\=" 227syn match perlFloat "\.[[:digit:]][[:digit:]_]*\%([eE][\-+]\=\d\+\)\=" 228 229syn match perlString "\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV 230syn match perlVStringV "\<v" contained 231 232 233syn region perlParensSQ start=+(+ end=+)+ extend contained contains=perlParensSQ,@perlInterpSQ keepend 234syn region perlBracketsSQ start=+\[+ end=+\]+ extend contained contains=perlBracketsSQ,@perlInterpSQ keepend 235syn region perlBracesSQ start=+{+ end=+}+ extend contained contains=perlBracesSQ,@perlInterpSQ keepend 236syn region perlAnglesSQ start=+<+ end=+>+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend 237 238syn region perlParensDQ start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend 239syn region perlBracketsDQ start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend 240syn region perlBracesDQ start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend 241syn region perlAnglesDQ start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend 242 243 244" Simple version of searches and matches 245syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[msixpodualgcn]*+ contains=@perlInterpMatch keepend extend 246syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[msixpodualgcn]*+ contains=@perlInterpMatch keepend extend 247syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgcn]*+ contains=@perlInterpSQ keepend extend 248syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgcn]*+ contains=@perlInterpSlash keepend extend 249syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgcn]*+ contains=@perlInterpMatch,perlParensDQ keepend extend 250syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgcn]*+ contains=@perlInterpMatch,perlBracesDQ extend 251syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgcn]*+ contains=@perlInterpMatch,perlAnglesDQ keepend extend 252syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgcn]*+ contains=@perlInterpMatch,perlBracketsDQ keepend extend 253 254" Below some hacks to recognise the // variant. This is virtually impossible to catch in all 255" cases as the / is used in so many other ways, but these should be the most obvious ones. 256syn region perlMatch matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[msixpodualgcn]*+ contains=@perlInterpSlash extend 257 258 259" Substitutions 260" perlMatch is the first part, perlSubstitution* is the substitution part 261syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend 262syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend extend 263syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend extend 264syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend 265syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend 266syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend 267syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend 268syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend 269syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[msixpodualgcern]*+ keepend contained contains=@perlInterpDQ extend 270syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlParensDQ keepend extend 271syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][msixpodualgcern]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend extend 272syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend extend 273syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>[msixpodualgcern]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend 274syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'[msixpodualgcern]*+ contained contains=@perlInterpSQ keepend extend 275 276" Translations 277" perlMatch is the first part, perlTranslation* is the second, translator part. 278syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ 279syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ 280syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl 281syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl 282syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl 283syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl 284syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cdsr]*+ contained 285syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+(+ end=+)[cdsr]*+ contains=perlParensSQ contained 286syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\[+ end=+\][cdsr]*+ contains=perlBracketsSQ contained 287syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+{+ end=+}[cdsr]*+ contains=perlBracesSQ contained 288syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+<+ end=+>[cdsr]*+ contains=perlAnglesSQ contained 289 290 291" Strings and q, qq, qw and qr expressions 292 293syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend 294syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ keepend extend 295syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend 296syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend extend 297syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend 298syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend 299syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend 300syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend 301 302syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend 303syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend extend 304syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend extend 305syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend extend 306syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend extend 307syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend extend 308 309syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend 310syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+ end=+#+ contains=@perlInterpSQ keepend extend 311syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend 312syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend 313syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend 314syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend 315 316syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1[imosxdual]*+ contains=@perlInterpMatch keepend extend 317syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/[imosxdual]*+ contains=@perlInterpSlash keepend extend 318syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#[imosxdual]*+ contains=@perlInterpMatch keepend extend 319syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'[imosxdual]*+ contains=@perlInterpSQ keepend extend 320syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)[imosxdual]*+ contains=@perlInterpMatch,perlParensDQ keepend extend 321 322" A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern 323syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}[imosxdual]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend 324syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>[imosxdual]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend 325syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\][imosxdual]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend 326 327" Constructs such as print <<EOF [...] EOF, 'here' documents 328" 329" XXX Any statements after the identifier are in perlString colour (i.e. 330" 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it 331" seems due to the 'auto-extending nature' of regions. 332syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+ end=+$+ contains=@perlTop oneline 333syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+$+ contains=@perlTop oneline 334syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+$+ contains=@perlTop oneline 335syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*""+ end=+$+ contains=@perlTop oneline 336syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\s*''+ end=+$+ contains=@perlTop oneline 337if exists("perl_fold") 338 syn region perlHereDoc start=+<<\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend 339 syn region perlHereDoc start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend 340 syn region perlHereDoc start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ fold extend 341 syn region perlHereDoc start=+<<\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend 342 syn region perlHereDoc start=+<<\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine fold extend 343 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold extend 344else 345 syn region perlHereDoc start=+<<\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ 346 syn region perlHereDoc start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ 347 syn region perlHereDoc start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ 348 syn region perlHereDoc start=+<<\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine 349 syn region perlHereDoc start=+<<\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine 350 syn region perlAutoload matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL 351endif 352 353 354" Class declarations 355" 356syn match perlPackageDecl "\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage 357syn keyword perlStatementPackage package contained 358 359" Functions 360" sub [name] [(prototype)] { 361" 362syn match perlSubError "[^[:space:];{#]" contained 363syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained 364syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ 365syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError,perlFakeGroup 366syn match perlSubAttributes "" contained nextgroup=perlSubError 367syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe 368if get(g:, "perl_sub_signatures", 0) 369 syn match perlSignature +(\_[^)]*)\_s*+ nextgroup=perlSubAttributes,perlComment contained 370else 371 syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained 372 syn match perlSubPrototype +(\_[^)]*)\_s*+ nextgroup=perlSubAttributes,perlComment contained contains=perlSubPrototypeError 373endif 374 375syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype,perlSignature,perlSubAttributes,perlComment 376 377syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName 378 379" The => operator forces a bareword to the left of it to be interpreted as 380" a string 381syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@=" 382 383" All other # are comments, except ^#! 384syn match perlComment "#.*" contains=perlTodo,@Spell extend 385syn match perlSharpBang "^#!.*" 386 387" Formats 388syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2 389syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained 390syn match perlFormatField "[@^][|<>~]\+\%(\.\.\.\)\=" contained 391syn match perlFormatField "[@^]#[#.]*" contained 392syn match perlFormatField "@\*" contained 393syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained 394syn match perlFormatField "@$" contained 395 396" __END__ and __DATA__ clauses 397if exists("perl_fold") 398 syntax region perlDATA start="^__DATA__$" skip="." end="." contains=@perlDATA fold 399 syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA fold 400else 401 syntax region perlDATA start="^__DATA__$" skip="." end="." contains=@perlDATA 402 syntax region perlDATA start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA 403endif 404 405" 406" Folding 407 408if exists("perl_fold") 409 " Note: this bit must come before the actual highlighting of the "package" 410 " keyword, otherwise this will screw up Pod lines that match /^package/ 411 if !exists("perl_nofold_packages") 412 syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend 413 endif 414 if !exists("perl_nofold_subs") 415 if get(g:, "perl_fold_anonymous_subs", 0) 416 syn region perlSubFold start="\<sub\>[^{]*{" end="}" transparent fold keepend extend 417 syn region perlSubFold start="\<\%(BEGIN\|END\|CHECK\|INIT\)\>\s*{" end="}" transparent fold keepend 418 else 419 syn region perlSubFold start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend 420 syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend 421 endif 422 endif 423 424 if exists("perl_fold_blocks") 425 syn region perlBlockFold start="^\z(\s*\)\%(if\|elsif\|unless\|for\|while\|until\|given\)\s*(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" start="^\z(\s*\)for\%(each\)\=\s*\%(\%(my\|our\)\=\s*\S\+\s*\)\=(.*)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend 426 syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend 427 endif 428 429 setlocal foldmethod=syntax 430 syn sync fromstart 431else 432 " fromstart above seems to set minlines even if perl_fold is not set. 433 syn sync minlines=0 434endif 435 436" NOTE: If you're linking new highlight groups to perlString, please also put 437" them into b:match_skip in ftplugin/perl.vim. 438 439" The default highlighting. 440hi def link perlSharpBang PreProc 441hi def link perlControl PreProc 442hi def link perlInclude Include 443hi def link perlSpecial Special 444hi def link perlString String 445hi def link perlCharacter Character 446hi def link perlNumber Number 447hi def link perlFloat Float 448hi def link perlType Type 449hi def link perlIdentifier Identifier 450hi def link perlLabel Label 451hi def link perlStatement Statement 452hi def link perlConditional Conditional 453hi def link perlRepeat Repeat 454hi def link perlOperator Operator 455hi def link perlFunction Keyword 456hi def link perlSubName Function 457hi def link perlSubPrototype Type 458hi def link perlSignature Type 459hi def link perlSubAttributes PreProc 460hi def link perlSubAttributesCont perlSubAttributes 461hi def link perlComment Comment 462hi def link perlTodo Todo 463if exists("perl_string_as_statement") 464 hi def link perlStringStartEnd perlStatement 465else 466 hi def link perlStringStartEnd perlString 467endif 468hi def link perlVStringV perlStringStartEnd 469hi def link perlList perlStatement 470hi def link perlMisc perlStatement 471hi def link perlVarPlain perlIdentifier 472hi def link perlVarPlain2 perlIdentifier 473hi def link perlArrow perlIdentifier 474hi def link perlFiledescRead perlIdentifier 475hi def link perlFiledescStatement perlIdentifier 476hi def link perlVarSimpleMember perlIdentifier 477hi def link perlVarSimpleMemberName perlString 478hi def link perlVarNotInMatches perlIdentifier 479hi def link perlVarSlash perlIdentifier 480hi def link perlQQ perlString 481hi def link perlHereDoc perlString 482hi def link perlStringUnexpanded perlString 483hi def link perlSubstitutionSQ perlString 484hi def link perlSubstitutionGQQ perlString 485hi def link perlTranslationGQ perlString 486hi def link perlMatch perlString 487hi def link perlMatchStartEnd perlStatement 488hi def link perlFormatName perlIdentifier 489hi def link perlFormatField perlString 490hi def link perlPackageDecl perlType 491hi def link perlStorageClass perlType 492hi def link perlPackageRef perlType 493hi def link perlStatementPackage perlStatement 494hi def link perlStatementStorage perlStatement 495hi def link perlStatementControl perlStatement 496hi def link perlStatementScalar perlStatement 497hi def link perlStatementRegexp perlStatement 498hi def link perlStatementNumeric perlStatement 499hi def link perlStatementList perlStatement 500hi def link perlStatementHash perlStatement 501hi def link perlStatementIOfunc perlStatement 502hi def link perlStatementFiledesc perlStatement 503hi def link perlStatementVector perlStatement 504hi def link perlStatementFiles perlStatement 505hi def link perlStatementFlow perlStatement 506hi def link perlStatementInclude perlStatement 507hi def link perlStatementProc perlStatement 508hi def link perlStatementSocket perlStatement 509hi def link perlStatementIPC perlStatement 510hi def link perlStatementNetwork perlStatement 511hi def link perlStatementPword perlStatement 512hi def link perlStatementTime perlStatement 513hi def link perlStatementMisc perlStatement 514hi def link perlStatementIndirObj perlStatement 515hi def link perlFunctionName perlIdentifier 516hi def link perlMethod perlIdentifier 517hi def link perlPostDeref perlIdentifier 518hi def link perlFunctionPRef perlType 519if !get(g:, 'perl_include_pod', 1) 520 hi def link perlPOD perlComment 521endif 522hi def link perlShellCommand perlString 523hi def link perlSpecialAscii perlSpecial 524hi def link perlSpecialDollar perlSpecial 525hi def link perlSpecialString perlSpecial 526hi def link perlSpecialStringU perlSpecial 527hi def link perlSpecialMatch perlSpecial 528hi def link perlDATA perlComment 529 530" NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part), 531" I had to remove the transparent property from the following regions 532" in order to get them to highlight correctly. Feel free to remove 533" these and reinstate the transparent property if you know how. 534hi def link perlParensSQ perlString 535hi def link perlBracketsSQ perlString 536hi def link perlBracesSQ perlString 537hi def link perlAnglesSQ perlString 538 539hi def link perlParensDQ perlString 540hi def link perlBracketsDQ perlString 541hi def link perlBracesDQ perlString 542hi def link perlAnglesDQ perlString 543 544hi def link perlSpecialStringU2 perlString 545 546" Possible errors 547hi def link perlNotEmptyLine Error 548hi def link perlElseIfError Error 549hi def link perlSubPrototypeError Error 550hi def link perlSubError Error 551 552" Syncing to speed up processing 553" 554if !exists("perl_no_sync_on_sub") 555 syn sync match perlSync grouphere NONE "^\s*\<package\s" 556 syn sync match perlSync grouphere NONE "^\s*\<sub\>" 557 syn sync match perlSync grouphere NONE "^}" 558endif 559 560if !exists("perl_no_sync_on_global_var") 561 syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{" 562 syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*(" 563endif 564 565if exists("perl_sync_dist") 566 execute "syn sync maxlines=" . perl_sync_dist 567else 568 syn sync maxlines=100 569endif 570 571syn sync match perlSyncPOD grouphere perlPOD "^=pod" 572syn sync match perlSyncPOD grouphere perlPOD "^=head" 573syn sync match perlSyncPOD grouphere perlPOD "^=item" 574syn sync match perlSyncPOD grouphere NONE "^=cut" 575 576let b:current_syntax = "perl" 577 578let &cpo = s:cpo_save 579unlet s:cpo_save 580 581" XXX Change to sts=4:sw=4 582" vim:ts=8:sts=2:sw=2:expandtab:ft=vim 583