7
vim syntax highlighting for perl, to use colors instead of \ and "
source link: https://pastebin.com/yCZ1wkYY
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
vim syntax highlighting for perl, to use colors instead of \ and "
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- " Vim syntax file
- " Language: Perl
- " Maintainer: vim-perl <[email protected]>
- " Homepage: https://github.com/vim-perl/vim-perl
- " Bugs/requests: https://github.com/vim-perl/vim-perl/issues
- " License: Vim License (see :help license)
- " Last Change: 2022 Jun 13
- " Contributors: Andy Lester <[email protected]>
- " Hinrik Örn Sigurðsson <[email protected]>
- " Lukas Mai <l.mai.web.de>
- " Nick Hibma <[email protected]>
- " Sonia Heimann <[email protected]>
- " Rob Hoelz <[email protected]>
- " Doug Kearns <[email protected]>
- " and many others.
- " Please download the most recent version first, before mailing
- " any comments.
- " The following parameters are available for tuning the
- " perl syntax highlighting, with defaults given:
- " let perl_include_pod = 1
- " unlet perl_no_scope_in_variables
- " unlet perl_no_extended_vars
- " unlet perl_string_as_statement
- " unlet perl_no_sync_on_sub
- " unlet perl_no_sync_on_global_var
- " let perl_sync_dist = 100
- " unlet perl_fold
- " unlet perl_fold_blocks
- " unlet perl_nofold_packages
- " unlet perl_nofold_subs
- " unlet perl_fold_anonymous_subs
- " unlet perl_no_subprototype_error
- if exists("b:current_syntax")
- finish
- endif
- let s:cpo_save = &cpo
- set cpo&vim
- " POD starts with ^=<word> and ends with ^=cut
- if get(g:, 'perl_include_pod', 1)
- " Include a while extra syntax file
- syn include @Pod syntax/pod.vim
- unlet b:current_syntax
- if get(g:, 'perl_fold', 1)
- syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend
- syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend
- syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
- syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
- endif
- " Use only the bare minimum of rules
- if get(g:, 'perl_fold', 1)
- syn region perlPOD start="^=[a-z]" end="^=cut" fold
- syn region perlPOD start="^=[a-z]" end="^=cut"
- endif
- endif
- syn cluster perlTop contains=TOP
- syn region perlBraces start="{" end="}" transparent extend
- " All keywords
- syn match perlConditional "\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
- syn match perlConditional "\<else\%(\%(\_s\*if\>\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty
- syn match perlRepeat "\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
- syn match perlOperator "\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
- " for some reason, adding this as the nextgroup for perlControl fixes BEGIN
- " folding issues...
- syn match perlFakeGroup "" contained
- syn match perlControl "\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup
- syn match perlStatementStorage "\<\%(my\|our\|local\|state\)\>"
- syn match perlStatementControl "\<\%(return\|last\|next\|redo\|goto\|break\)\>"
- syn match perlStatementScalar "\<\%(chom\=p\|chr\|crypt\|r\=index\|lc\%(first\)\=\|length\|ord\|pack\|sprintf\|substr\|fc\|uc\%(first\)\=\)\>"
- syn match perlStatementRegexp "\<\%(pos\|quotemeta\|split\|study\)\>"
- syn match perlStatementNumeric "\<\%(abs\|atan2\|cos\|exp\|hex\|int\|log\|oct\|rand\|sin\|sqrt\|srand\)\>"
- syn match perlStatementList "\<\%(splice\|unshift\|shift\|push\|pop\|join\|reverse\|grep\|map\|sort\|unpack\)\>"
- syn match perlStatementHash "\<\%(delete\|each\|exists\|keys\|values\)\>"
- syn match perlStatementIOfunc "\<\%(syscall\|dbmopen\|dbmclose\)\>"
- syn match perlStatementFiledesc "\<\%(binmode\|close\%(dir\)\=\|eof\|fileno\|getc\|lstat\|printf\=\|read\%(dir\|line\|pipe\)\|rewinddir\|say\|select\|stat\|tell\%(dir\)\=\|write\)\>" nextgroup=perlFiledescStatementNocomma skipwhite
- syn match perlStatementFiledesc "\<\%(fcntl\|flock\|ioctl\|open\%(dir\)\=\|read\|seek\%(dir\)\=\|sys\%(open\|read\|seek\|write\)\|truncate\)\>" nextgroup=perlFiledescStatementComma skipwhite
- syn match perlStatementVector "\<vec\>"
- syn match perlStatementFiles "\<\%(ch\%(dir\|mod\|own\|root\)\|glob\|link\|mkdir\|readlink\|rename\|rmdir\|symlink\|umask\|unlink\|utime\)\>"
- syn match perlStatementFiles "-[rwxoRWXOezsfdlpSbctugkTBMAC]\>"
- syn match perlStatementFlow "\<\%(caller\|die\|dump\|eval\|exit\|wantarray\|evalbytes\)\>"
- syn match perlStatementInclude "\<\%(require\|import\|unimport\)\>"
- syn match perlStatementInclude "\<\%(use\|no\)\s\+\%(\%(attributes\|attrs\|autodie\%(::\%(exception\%(::system\)\=\|hints\|skip\)\)\=\|autouse\|parent\|base\|big\%(int\|num\|rat\)\|blib\|bytes\|charnames\|constant\|deprecate\|diagnostics\|encoding\%(::warnings\)\=\|experimental\|feature\|fields\|filetest\|if\|integer\|less\|lib\|locale\|mro\|ok\|open\|ops\|overload\|overloading\|re\|sigtrap\|sort\|strict\|subs\|threads\%(::shared\)\=\|utf8\|vars\|version\|vmsish\|warnings\%(::register\)\=\)\>\)\="
- syn match perlStatementProc "\<\%(alarm\|exec\|fork\|get\%(pgrp\|ppid\|priority\)\|kill\|pipe\|set\%(pgrp\|priority\)\|sleep\|system\|times\|wait\%(pid\)\=\)\>"
- syn match perlStatementSocket "\<\%(accept\|bind\|connect\|get\%(peername\|sock\%(name\|opt\)\)\|listen\|recv\|send\|setsockopt\|shutdown\|socket\%(pair\)\=\)\>"
- syn match perlStatementIPC "\<\%(msg\%(ctl\|get\|rcv\|snd\)\|sem\%(ctl\|get\|op\)\|shm\%(ctl\|get\|read\|write\)\)\>"
- syn match perlStatementNetwork "\<\%(\%(end\|[gs]et\)\%(host\|net\|proto\|serv\)ent\|get\%(\%(host\|net\)by\%(addr\|name\)\|protoby\%(name\|number\)\|servby\%(name\|port\)\)\)\>"
- syn match perlStatementPword "\<\%(get\%(pw\%(uid\|nam\)\|gr\%(gid\|nam\)\|login\)\)\|\%(end\|[gs]et\)\%(pw\|gr\)ent\>"
- syn match perlStatementTime "\<\%(gmtime\|localtime\|time\)\>"
- syn match perlStatementMisc "\<\%(warn\|format\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
- syn keyword perlTodo TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained
- syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\%(\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*\)\@<={" end="}" transparent extend
- syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
- " Perl Identifiers.
- " Should be cleaned up to better handle identifiers in particular situations
- " (in hash keys for example)
- " Plain identifiers: $foo, @foo, $#foo, %foo, &foo and dereferences $$foo, @$foo, etc.
- " We do not process complex things such as @{${"foo"}}. Too complicated, and
- " too slow. And what is after the -> is *not* considered as part of the
- " variable - there again, too complicated and too slow.
- " Special variables first ($^A, ...) and ($|, $', ...)
- syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\="
- syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
- syn match perlVarPlain "@[-+]"
- syn match perlVarPlain "$\%(0\|[1-9]\d*\)"
- " Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
- syn match perlVarPlain "$::\@!"
- " These variables are not recognized within matches.
- syn match perlVarNotInMatches "$[|)]"
- " This variable is not recognized within matches delimited by m//.
- syn match perlVarSlash "$/"
- " And plain identifiers
- syn match perlPackageRef "[$@#%*&]\%(\%(::\|'\)\=\I\i*\%(\%(::\|'\)\I\i*\)*\)\=\%(::\|'\)\I"ms=s+1,me=e-1 contained
- " To not highlight packages in variables as a scope reference - i.e. in
- " $pack::var, pack:: is a scope, just set "perl_no_scope_in_variables"
- " If you don't want complex things like @{${"foo"}} to be processed,
- " just set the variable "perl_no_extended_vars"...
- if !get(g:, 'perl_no_scope_in_variables', 0)
- syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
- syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
- syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" contains=perlPackageRef nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
- syn match perlVarPlain "\%([@$]\|\$#\)\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
- syn match perlVarPlain2 "%\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
- syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref
- endif
- syn match perlVarPlain2 "%[-+]"
- if !get(g:, 'perl_no_extended_vars', 0)
- syn cluster perlExpr contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQ,perlQQ,perlQW,perlQR,perlArrow,perlBraces
- syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained
- syn region perlArrow matchgroup=perlArrow start="->\s*\[" end="\]" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained
- syn region perlArrow matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained
- syn match perlArrow "->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contained
- syn region perlVarBlock matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
- syn region perlVarBlock2 matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
- syn match perlVarPlain2 "[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
- syn match perlVarPlain "\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
- syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
- syn match perlVarSimpleMember "\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref contains=perlVarSimpleMemberName contained extend
- syn match perlVarSimpleMemberName "\I\i*" contained
- syn region perlVarMember matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlPostDeref extend
- syn match perlPackageConst "__PACKAGE__" nextgroup=perlPostDeref
- syn match perlPostDeref "->\%($#\|[$@%&*]\)\*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref
- syn region perlPostDeref start="->\%($#\|[$@%&*]\)\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref
- syn region perlPostDeref matchgroup=perlPostDeref start="->\%($#\|[$@%&*]\){" skip="\\}" end="}" keepend extend contained contains=@perlExpr nextgroup=perlVarSimpleMember,perlVarMember,perlPostDeref
- endif
- " File Descriptors
- syn match perlFiledescRead "<\h\w*>"
- syn match perlFiledescStatementComma "(\=\s*\<\u\w*\>\s*,"me=e-1 transparent contained contains=perlFiledescStatement
- syn match perlFiledescStatementNocomma "(\=\s*\<\u\w*\>\s*[^, \t]"me=e-1 transparent contained contains=perlFiledescStatement
- syn match perlFiledescStatement "\<\u\w*\>" contained
- " Special characters in strings and matches
- syn match perlSpecialString "\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained contains=perlEsc extend
- syn match perlSpecialStringU2 "\\." extend contained contains=perlEsc
- syn match perlSpecialStringU "\\\\" contained conceal cchar=\
- syn match perlEsc "\\" conceal contained
- syn match perlSpecialMatch "\\[1-9]" contained extend
- syn match perlSpecialMatch "\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
- syn match perlSpecialMatch "\\k\%(<\h\w*>\|'\h\w*'\)" contained
- syn match perlSpecialMatch "{\d\+\%(,\%(\d\+\)\=\)\=}" contained
- syn match perlSpecialMatch "\[[]-]\=[^\[\]]*[]-]\=\]" contained extend
- syn match perlSpecialMatch "[+*()?.]" contained
- syn match perlSpecialMatch "(?[#:=!]" contained
- syn match perlSpecialMatch "(?[impsx]*\%(-[imsx]\+\)\=)" contained
- syn match perlSpecialMatch "(?\%([-+]\=\d\+\|R\))" contained
- syn match perlSpecialMatch "(?\%(&\|P[>=]\)\h\w*)" contained
- syn match perlSpecialMatch "(\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\=\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\=\|ACCEPT\))" contained
- " Possible errors
- " Highlight lines with only whitespace (only in blank delimited here documents) as errors
- syn match perlNotEmptyLine "^\s\+$" contained
- " Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {"
- syn match perlElseIfError "else\_s*if" containedin=perlConditional
- syn keyword perlElseIfError elseif containedin=perlConditional
- " Variable interpolation
- " These items are interpolated inside "" strings and similar constructs.
- syn cluster perlInterpDQ contains=perlSpecialString,perlVarPlain,perlVarNotInMatches,perlVarSlash,perlVarBlock
- " These items are interpolated inside '' strings and similar constructs.
- syn cluster perlInterpSQ contains=perlSpecialStringU,perlSpecialStringU2
- " These items are interpolated inside m// matches and s/// substitutions.
- syn cluster perlInterpSlash contains=perlSpecialString,perlSpecialMatch,perlVarPlain,perlVarBlock
- " These items are interpolated inside m## matches and s### substitutions.
- syn cluster perlInterpMatch contains=@perlInterpSlash,perlVarSlash
- " Shell commands
- syn region perlShellCommand matchgroup=perlMatchStartEnd start="`" end="`" contains=@perlInterpDQ keepend
- " Constants
- " Numbers
- syn case ignore
- syn match perlNumber "\<\%(0\|[1-9]\%(_\=\d\)*\)\>"
- syn match perlNumber "\<0\%(x\x\%(_\=\x\)*\|b[01]\%(_\=[01]\)*\|o\=\%(_\=\o\)*\)\>"
- syn match perlFloat "\<\d\%(_\=\d\)*e[-+]\=\d\%(_\=\d\)*"
- syn match perlFloat "\<\d\%(_\=\d\)*\.\%(\d\%(_\=\d\)*\)\=\%(e[-+]\=\d\%(_\=\d\)*\)\="
- syn match perlFloat "\.\d\%(_\=\d\)*\%(e[-+]\=\d\%(_\=\d\)*\)\="
- syn match perlFloat "\<0x\x\%(_\=\x\)*p[-+]\=\d\%(_\=\d\)*"
- syn match perlFloat "\<0x\x\%(_\=\x\)*\.\%(\x\%(_\=\x\)*\)\=\%(p[-+]\=\d\%(_\=\d\)*\)\="
- syn match perlFloat "\<0x\.\x\%(_\=\x\)*\%(p[-+]\=\d\%(_\=\d\)*\)\="
- syn case match
- syn match perlString "\<\%(v\d\+\%(\.\d\+\)*\|\d\+\%(\.\d\+\)\{2,}\)\>" contains=perlVStringV
- syn match perlVStringV "\<v" contained
- syn region perlParensSQ start=+(+ end=+)+ extend contained contains=perlParensSQ,@perlInterpSQ keepend
- syn region perlBracketsSQ start=+\[+ end=+\]+ extend contained contains=perlBracketsSQ,@perlInterpSQ keepend
- syn region perlBracesSQ start=+{+ end=+}+ extend contained contains=perlBracesSQ,@perlInterpSQ keepend
- syn region perlAnglesSQ start=+<+ end=+>+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend
- syn region perlParensDQ start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend
- syn region perlBracketsDQ start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend
- syn region perlBracesDQ start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend
- syn region perlAnglesDQ start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend
- " Simple version of searches and matches
- syn match perlMatchModifiers "[msixpadluncgo]\+" contained
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+ contains=@perlInterpMatch keepend extend nextgroup=perlMatchModifiers
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#+ contains=@perlInterpMatch keepend extend nextgroup=perlMatchModifiers
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'+ contains=@perlInterpSQ keepend extend nextgroup=perlMatchModifiers
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/+ contains=@perlInterpSlash keepend extend nextgroup=perlMatchModifiers
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ keepend extend nextgroup=perlMatchModifiers
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ extend nextgroup=perlMatchModifiers
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ keepend extend nextgroup=perlMatchModifiers
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ keepend extend nextgroup=perlMatchModifiers
- " Below some hacks to recognise the // variant. This is virtually impossible to catch in all
- " cases as the / is used in so many other ways, but these should be the most obvious ones.
- syn 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=+/+ contains=@perlInterpSlash extend nextgroup=perlMatchModifiers
- " Substitutions
- " perlMatch is the first part, perlSubstitution* is the substitution part
- syn match perlSubstitutionModifiers "[msixpadluncgero]\+" contained
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*'+ end=+'+me=e-1 contains=@perlInterpSQ nextgroup=perlSubstitutionSQ keepend extend
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*/+ end=+/+me=e-1 contains=@perlInterpSlash nextgroup=perlSubstitutionGQQ keepend extend
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s#+ end=+#+me=e-1 contains=@perlInterpMatch nextgroup=perlSubstitutionGQQ keepend extend
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
- syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1+ keepend contained contains=@perlInterpDQ extend nextgroup=perlSubstitutionModifiers
- syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+(+ end=+)+ contained contains=@perlInterpDQ,perlParensDQ keepend extend nextgroup=perlSubstitutionModifiers
- syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+\[+ end=+\]+ contained contains=@perlInterpDQ,perlBracketsDQ keepend extend nextgroup=perlSubstitutionModifiers
- syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+{+ end=+}+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend extend nextgroup=perlSubstitutionModifiers
- syn region perlSubstitutionGQQ matchgroup=perlMatchStartEnd start=+<+ end=+>+ contained contains=@perlInterpDQ,perlAnglesDQ keepend extend nextgroup=perlSubstitutionModifiers
- syn region perlSubstitutionSQ matchgroup=perlMatchStartEnd start=+'+ end=+'+ contained contains=@perlInterpSQ keepend extend nextgroup=perlSubstitutionModifiers
- " Translations
- " perlMatch is the first part, perlTranslation* is the second, translator part.
- syn match perlTranslationModifiers "[cdsr]\+" contained
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\>\s*\z([^[:space:]([{<#]\)+ end=+\z1+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)#+ end=+#+me=e-1 contains=@perlInterpSQ nextgroup=perlTranslationGQ
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
- syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
- syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1+ contained nextgroup=perlTranslationModifiers
- syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+(+ end=+)+ contains=perlParensSQ contained nextgroup=perlTranslationModifiers
- syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+\[+ end=+\]+ contains=perlBracketsSQ contained nextgroup=perlTranslationModifiers
- syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+{+ end=+}+ contains=perlBracesSQ contained nextgroup=perlTranslationModifiers
- syn region perlTranslationGQ matchgroup=perlMatchStartEnd start=+<+ end=+>+ contains=perlAnglesSQ contained nextgroup=perlTranslationModifiers
- " Strings and q, qq, qw and qr expressions
- syn region perlStringUnexpanded matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend concealends
- syn region perlString matchgroup=perlStringStartEnd start=+"+ end=+"+ contains=@perlInterpDQ keepend extend concealends
- syn region perlQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
- syn region perlQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend extend
- syn region perlQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
- syn region perlQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
- syn region perlQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
- syn region perlQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
- syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend
- syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend extend
- syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend extend
- syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend extend
- syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend extend
- syn region perlQQ matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend extend
- syn region perlQW matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
- syn region perlQW matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+ end=+#+ contains=@perlInterpSQ keepend extend
- syn region perlQW matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
- syn region perlQW matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
- syn region perlQW matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
- syn region perlQW matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
- syn match perlQRModifiers "[msixpadluno]\+" contained
- syn region perlQR matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+ end=+\z1+ contains=@perlInterpMatch keepend extend nextgroup=perlQRModifiers
- syn region perlQR matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+ end=+/+ contains=@perlInterpSlash keepend extend nextgroup=perlQRModifiers
- syn region perlQR matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+ end=+#+ contains=@perlInterpMatch keepend extend nextgroup=perlQRModifiers
- syn region perlQR matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+ end=+'+ contains=@perlInterpSQ keepend extend nextgroup=perlQRModifiers
- syn region perlQR matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ keepend extend nextgroup=perlQRModifiers
- " A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
- syn region perlQR matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend nextgroup=perlQRModifiers
- syn region perlQR matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend nextgroup=perlQRModifiers
- syn region perlQR matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend nextgroup=perlQRModifiers
- " Constructs such as print <<EOF [...] EOF, 'here' documents
- " XXX Any statements after the identifier are in perlString colour (i.e.
- " 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
- " seems due to the 'auto-extending nature' of regions.
- " XXX Indented heredocs are not perfect - they sometimes seem to take a moment
- " to update if switched from double to single quotes and vice versa.
- " Note: bare delimiters such as << to mean <<"" are not supported. These are a
- " fatal error since 5.28 and, apparently, a rarely used feature.
- syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\~\=\I\i*+ end=+$+ contains=@perlTop oneline
- syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\~\=\\\I\i*+ end=+$+ contains=@perlTop oneline
- syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\~\=\s*"[^\\"]*\%(\\.[^\\"]*\)*"+ end=+$+ contains=@perlTop oneline
- syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\~\=\s*'[^\\']*\%(\\.[^\\']*\)*'+ end=+$+ contains=@perlTop oneline
- syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\~\=\s*`[^\\`]*\%(\\.[^\\`]*\)*`+ end=+$+ contains=@perlTop oneline
- syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\~\=\s*""+ end=+$+ contains=@perlTop oneline
- syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\~\=\s*''+ end=+$+ contains=@perlTop oneline
- syn region perlHereDocStart matchgroup=perlStringStartEnd start=+<<\~\=\s*``+ end=+$+ contains=@perlTop oneline
- if get(g:, 'perl_fold', 0)
- syn region perlHereDoc start=+<<\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend
- syn region perlHereDoc start=+<<\\\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ fold extend
- syn region perlHereDoc start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend
- syn region perlHereDoc start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ fold extend
- syn region perlHereDoc start=+<<\s*`\z([^\\`]*\%(\\.[^\\`]*\)*\)`+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ fold extend
- syn region perlHereDoc start=+<<\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend
- syn region perlHereDoc start=+<<\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine fold extend
- syn region perlHereDoc start=+<<\s*``+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend
- syn region perlHereDoc start=+<<\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ
- syn region perlHereDoc start=+<<\\\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ
- syn region perlHereDoc start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ
- syn region perlHereDoc start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpSQ
- syn region perlHereDoc start=+<<\s*`\z([^\\`]*\%(\\.[^\\`]*\)*\)`+ matchgroup=perlStringStartEnd end=+^\z1$+ contains=perlHereDocStart,@perlInterpDQ
- syn region perlHereDoc start=+<<\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine
- syn region perlHereDoc start=+<<\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine
- syn region perlHereDoc start=+<<\s*``+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine
- endif
- if get(g:, 'perl_fold', 0)
- syn region perlIndentedHereDoc start=+<<\~\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpDQ fold extend
- syn region perlIndentedHereDoc start=+<<\~\\\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpSQ fold extend
- syn region perlIndentedHereDoc start=+<<\~\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpDQ fold extend
- syn region perlIndentedHereDoc start=+<<\~\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpSQ fold extend
- syn region perlIndentedHereDoc start=+<<\~\s*`\z([^\\`]*\%(\\.[^\\`]*\)*\)`+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlIndentedHereDocStart,@perlInterpDQ fold extend
- syn region perlIndentedHereDoc start=+<<\~\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlIndentedHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend
- syn region perlIndentedHereDoc start=+<<\~\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlIndentedHereDocStart,@perlInterpSQ,perlNotEmptyLine fold extend
- syn region perlIndentedHereDoc start=+<<\~\s*``+ matchgroup=perlStringStartEnd end=+^$+ contains=perlIndentedHereDocStart,@perlInterpDQ,perlNotEmptyLine fold extend
- syn region perlIndentedHereDoc start=+<<\~\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpDQ
- syn region perlIndentedHereDoc start=+<<\~\\\z(\I\i*\)+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpSQ
- syn region perlIndentedHereDoc start=+<<\~\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpDQ
- syn region perlIndentedHereDoc start=+<<\~\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpSQ
- syn region perlIndentedHereDoc start=+<<\~\s*`\z([^\\`]*\%(\\.[^\\`]*\)*\)`+ matchgroup=perlStringStartEnd end=+^\s*\z1$+ contains=perlHereDocStart,@perlInterpDQ
- syn region perlIndentedHereDoc start=+<<\~\s*""+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine
- syn region perlIndentedHereDoc start=+<<\~\s*''+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpSQ,perlNotEmptyLine
- syn region perlIndentedHereDoc start=+<<\~\s*``+ matchgroup=perlStringStartEnd end=+^$+ contains=perlHereDocStart,@perlInterpDQ,perlNotEmptyLine
- endif
- " Class declarations
- syn match perlPackageDecl "\<package\s\+\%(\h\|::\)\%(\w\|::\)*" contains=perlStatementPackage
- syn keyword perlStatementPackage package contained
- " Functions
- if get(g:, "perl_sub_signatures", 0)
- syn match perlSubSignature "\s*([^)]*)" contained extend
- syn match perlSubPrototype "\s*([\\$@%&*\[\];]*)" contained extend
- endif
- syn match perlSubAttribute "\s*:\s*\h\w*\%(([^)]*)\|\)" contained extend
- syn match perlSubName "\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\s*" contained extend
- syn region perlSubDeclaration start="" end="[;{]" contains=perlSubName,perlSubPrototype,perlSubAttribute,perlSubSignature,perlComment contained transparent
- syn match perlFunction "\<sub\>\_s*" nextgroup=perlSubDeclaration
- " The => operator forces a bareword to the left of it to be interpreted as
- " a string
- syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
- " All other # are comments, except ^#!
- syn match perlComment "#.*" contains=perlTodo,@Spell extend
- syn match perlSharpBang "^#!.*"
- " Formats
- syn region perlFormat matchgroup=perlStatementIOFunc start="^\s*\<format\s\+\k\+\s*=\s*$"rs=s+6 end="^\s*\.\s*$" contains=perlFormatName,perlFormatField,perlVarPlain,perlVarPlain2
- syn match perlFormatName "format\s\+\k\+\s*="lc=7,me=e-1 contained
- syn match perlFormatField "[@^][|<>~]\+\%(\.\.\.\)\=" contained
- syn match perlFormatField "[@^]#[#.]*" contained
- syn match perlFormatField "@\*" contained
- syn match perlFormatField "@[^A-Za-z_|<>~#*]"me=e-1 contained
- syn match perlFormatField "@$" contained
- " __END__ and __DATA__ clauses
- " Vim excludes empty syn-region end lines from the fold region. This is
- " probably a bug and means a DATA section ending with an empty line does not
- " have that final line included in the fold.
- " As a workaround we exploit an unterminated syntax region here with an end
- " pattern that will (probably) never match. This forces all lines to be
- " included in the fold region. Of course, if it does match then there's
- " nothing to work around as it is a non-empty line.
- " This problem also exists with empty string delimited heredocs but there's no
- " known workaround for that case.
- if get(g:, 'perl_fold', 0)
- syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="VIM_PERL_EOF\%$" contains=@perlDATA fold
- syntax region perlEND matchgroup=perlENDStart start="^__END__$" end="VIM_PERL_EOF\%$" contains=@perlDATA fold
- syntax region perlDATA matchgroup=perlDATAStart start="^__DATA__$" end="\%$" contains=@perlDATA
- syntax region perlEND matchgroup=perlENDStart start="^__END__$" end="\%$" contains=@perlDATA
- endif
- " TODO: generalise this to allow other filetypes
- if get(g:, 'perl_highlight_data', 0)
- syn cluster perlDATA add=perlPOD
- syn cluster perlDATA remove=perlPOD
- endif
- " Folding
- if get(g:, 'perl_fold', 0)
- " Note: this bit must come before the actual highlighting of the "package"
- " keyword, otherwise this will screw up Pod lines that match /^package/
- if !get(g:, 'perl_nofold_packages', 0)
- syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
- syn region perlPackageFold start="^\z(\s*\)package\s*\S\+\s*{" end="^\z1}" transparent fold keepend
- endif
- if !get(g:, 'perl_nofold_subs', 0)
- if get(g:, "perl_fold_anonymous_subs", 0)
- " EXPLANATION:
- " \<sub\> - "sub" keyword
- " \_[^;{]* - any characters, including new line, but not ";" or "{", zero or more times
- " \%(([\\$@%&*\[\];]*)\)\= - prototype definition, \$@%&*[]; characters between (), zero or 1 times
- " \_[^;]* - any characters, including new line, but not ";" or "{", zero or more times
- " { - start subroutine block
- syn region perlSubFold start="\<sub\>\_[^;{]*\%(([\\$@%&*\[\];]*)\)\=\_[^;{]*{" end="}" transparent fold keepend extend
- " EXPLANATION:
- " same, as above, but first non-space character after "sub" keyword must
- " be [A-Za-z_]
- syn region perlSubFold start="\<sub\>\s*\h\_[^;{]*\%(([\\$@%&*\[\];]*)\)\=\_[^;]*{" end="}" transparent fold keepend extend
- endif
- syn region perlSubFold start="\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>\_s*{" end="}" transparent fold keepend
- endif
- if get(g:, 'perl_fold_blocks', 0)
- 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
- " TODO this is works incorrectly
- syn region perlBlockFold start="^\z(\s*\)\%(do\|else\)\%(\s*{\)\=\s*\%(#.*\)\=$" end="^\z1}\s*while" end="^\z1}\s*;\=\%(#.*\)\=$" transparent fold keepend
- if get(g:, 'perl_fold_do_blocks', 0)
- syn region perlDoBlockDeclaration start="" end="{" contains=perlComment contained transparent
- syn match perlOperator "\<do\>\_s*" nextgroup=perlDoBlockDeclaration
- syn region perlDoBlockFold start="\<do\>\_[^{]*{" end="}" transparent fold keepend extend
- endif
- endif
- syn sync fromstart
- " fromstart above seems to set minlines even if perl_fold is not set.
- syn sync minlines=0
- endif
- " NOTE: If you're linking new highlight groups to perlString, please also put
- " them into b:match_skip in ftplugin/perl.vim.
- " The default highlighting.
- hi def link perlSharpBang PreProc
- hi def link perlControl PreProc
- hi def link perlInclude Include
- hi def link perlSpecial Special
- hi def perlString ctermbg=magenta ctermfg=black
- hi def link perlCharacter Character
- hi def link perlNumber Number
- hi def link perlFloat Float
- hi def link perlType Type
- hi def link perlIdentifier Identifier
- hi def link perlLabel Label
- hi def link perlStatement Statement
- hi def link perlConditional Conditional
- hi def link perlRepeat Repeat
- hi def link perlOperator Operator
- hi def link perlFunction Keyword
- hi def link perlSubName Function
- hi def link perlSubPrototype Type
- hi def link perlSubSignature Type
- hi def link perlSubAttribute PreProc
- hi def link perlComment Comment
- hi def link perlTodo Todo
- if get(g:, 'perl_string_as_statement', 0)
- hi def link perlStringStartEnd perlStatement
- hi def link perlStringStartEnd perlString
- endif
- hi def link perlVStringV perlStringStartEnd
- hi def link perlList perlStatement
- hi def link perlMisc perlStatement
- hi def link perlVarPlain perlIdentifier
- hi def link perlVarPlain2 perlIdentifier
- hi def link perlArrow perlIdentifier
- hi def link perlFiledescRead perlIdentifier
- hi def link perlFiledescStatement perlIdentifier
- hi def link perlVarSimpleMember perlIdentifier
- hi def link perlVarSimpleMemberName perlString
- hi def link perlVarNotInMatches perlIdentifier
- hi def link perlVarSlash perlIdentifier
- hi def link perlQ perlString
- hi def link perlQQ perlString
- hi def link perlQW perlString
- hi def link perlQR perlString
- hi def link perlMatchModifiers perlMatchStartEnd
- hi def link perlSubstitutionModifiers perlMatchStartEnd
- hi def link perlTranslationModifiers perlMatchStartEnd
- hi def link perlQRModifiers perlStringStartEnd
- hi def link perlHereDoc perlString
- hi def link perlIndentedHereDoc perlString
- hi def link perlStringUnexpanded perlString
- hi def link perlSubstitutionSQ perlString
- hi def link perlSubstitutionGQQ perlString
- hi def link perlTranslationGQ perlString
- hi def link perlMatch perlString
- hi def link perlMatchStartEnd perlStatement
- hi def link perlFormatName perlIdentifier
- hi def link perlFormatField perlString
- hi def link perlPackageDecl perlType
- hi def link perlStorageClass perlType
- hi def link perlPackageRef perlType
- hi def link perlStatementPackage perlStatement
- hi def link perlStatementStorage perlStatement
- hi def link perlStatementControl perlStatement
- hi def link perlStatementScalar perlStatement
- hi def link perlStatementRegexp perlStatement
- hi def link perlStatementNumeric perlStatement
- hi def link perlStatementList perlStatement
- hi def link perlStatementHash perlStatement
- hi def link perlStatementIOfunc perlStatement
- hi def link perlStatementFiledesc perlStatement
- hi def link perlStatementVector perlStatement
- hi def link perlStatementFiles perlStatement
- hi def link perlStatementFlow perlStatement
- hi def link perlStatementInclude perlStatement
- hi def link perlStatementProc perlStatement
- hi def link perlStatementSocket perlStatement
- hi def link perlStatementIPC perlStatement
- hi def link perlStatementNetwork perlStatement
- hi def link perlStatementPword perlStatement
- hi def link perlStatementTime perlStatement
- hi def link perlStatementMisc perlStatement
- hi def link perlStatementIndirObj perlStatement
- hi def link perlFunctionName perlIdentifier
- hi def link perlMethod perlIdentifier
- hi def link perlPostDeref perlIdentifier
- hi def link perlFunctionPRef perlType
- if !get(g:, 'perl_include_pod', 1)
- hi def link perlPOD perlComment
- endif
- hi def link perlShellCommand perlString
- hi def link perlSpecialAscii perlSpecial
- hi def link perlSpecialDollar perlSpecial
- hi def perlSpecialString term=bold ctermfg=green
- hi def link perlSpecialStringU perlSpecial
- hi def link perlSpecialMatch perlSpecial
- hi def link perlEND perlComment
- hi def link perlENDStart perlEND
- hi def link perlDATA perlComment
- hi def link perlDATAStart perlDATA
- " NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part),
- " I had to remove the transparent property from the following regions
- " in order to get them to highlight correctly. Feel free to remove
- " these and reinstate the transparent property if you know how.
- hi def link perlParensSQ perlString
- hi def link perlBracketsSQ perlString
- hi def link perlBracesSQ perlString
- hi def link perlAnglesSQ perlString
- hi def link perlParensDQ perlString
- hi def link perlBracketsDQ perlString
- hi def link perlBracesDQ perlString
- hi def link perlAnglesDQ perlString
- hi def link perlSpecialStringU2 perlSpecialString
- " Possible errors
- hi def link perlNotEmptyLine Error
- hi def link perlElseIfError Error
- " Syncing to speed up processing
- if !get(g:, 'perl_no_sync_on_sub', 0)
- syn sync match perlSync grouphere NONE "^\s*\<package\s"
- syn sync match perlSync grouphere NONE "^\s*\<sub\>"
- syn sync match perlSync grouphere NONE "^}"
- endif
- if !get(g:, 'perl_no_sync_on_global_var', 0)
- syn sync match perlSync grouphere NONE "^$\I[[:alnum:]_:]+\s*=\s*{"
- syn sync match perlSync grouphere NONE "^[@%]\I[[:alnum:]_:]+\s*=\s*("
- endif
- if get(g:, 'perl_sync_dist', 0)
- execute "syn sync maxlines=" . perl_sync_dist
- syn sync maxlines=100
- endif
- syn sync match perlSyncPOD grouphere perlPOD "^=pod"
- syn sync match perlSyncPOD grouphere perlPOD "^=head"
- syn sync match perlSyncPOD grouphere perlPOD "^=item"
- syn sync match perlSyncPOD grouphere NONE "^=cut"
- set conceallevel=2
- let b:current_syntax = "perl"
- let &cpo = s:cpo_save
- unlet s:cpo_save
- " XXX Change to sts=4:sw=4
- " vim:ts=8:sts=2:sw=2:expandtab:ft=vim
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK