Current Path: > > > usr > share > vim > vim80 > > syntax
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
2html.vim | File | 69175 bytes | August 02 2022 16:56:59. | |
README.txt | File | 1403 bytes | August 02 2022 16:56:59. | |
a2ps.vim | File | 2426 bytes | August 02 2022 16:56:59. | |
a65.vim | File | 6394 bytes | August 02 2022 16:56:59. | |
aap.vim | File | 5697 bytes | August 02 2022 16:56:59. | |
abap.vim | File | 9030 bytes | August 02 2022 16:56:59. | |
abaqus.vim | File | 1094 bytes | August 02 2022 16:56:59. | |
abc.vim | File | 1842 bytes | August 02 2022 16:56:59. | |
abel.vim | File | 5114 bytes | August 02 2022 16:56:59. | |
acedb.vim | File | 4871 bytes | August 02 2022 16:56:59. | |
ada.vim | File | 13050 bytes | August 02 2022 16:56:59. | |
aflex.vim | File | 4368 bytes | August 02 2022 16:56:59. | |
ahdl.vim | File | 2771 bytes | August 02 2022 16:56:59. | |
alsaconf.vim | File | 1546 bytes | August 02 2022 16:56:59. | |
amiga.vim | File | 2967 bytes | August 02 2022 16:56:59. | |
aml.vim | File | 24137 bytes | August 02 2022 16:56:59. | |
ampl.vim | File | 4108 bytes | August 02 2022 16:56:59. | |
ant.vim | File | 5816 bytes | August 02 2022 16:56:59. | |
antlr.vim | File | 1793 bytes | August 02 2022 16:56:59. | |
apache.vim | File | 14969 bytes | August 02 2022 16:56:59. | |
apachestyle.vim | File | 1417 bytes | August 02 2022 16:56:59. | |
aptconf.vim | File | 22228 bytes | August 02 2022 16:56:59. | |
arch.vim | File | 1149 bytes | August 02 2022 16:56:59. | |
arduino.vim | File | 2031 bytes | August 02 2022 16:56:59. | |
art.vim | File | 1297 bytes | August 02 2022 16:56:59. | |
asciidoc.vim | File | 10998 bytes | August 02 2022 16:56:59. | |
asm.vim | File | 4338 bytes | August 02 2022 16:56:59. | |
asm68k.vim | File | 14280 bytes | August 02 2022 16:56:59. | |
asmh8300.vim | File | 1994 bytes | August 02 2022 16:56:59. | |
asn.vim | File | 2578 bytes | August 02 2022 16:56:59. | |
aspperl.vim | File | 811 bytes | August 02 2022 16:56:59. | |
aspvbs.vim | File | 9099 bytes | August 02 2022 16:56:59. | |
asterisk.vim | File | 5524 bytes | August 02 2022 16:56:59. | |
asteriskvm.vim | File | 2332 bytes | August 02 2022 16:56:59. | |
atlas.vim | File | 2602 bytes | August 02 2022 16:56:59. | |
autodoc.vim | File | 3730 bytes | August 02 2022 16:56:59. | |
autohotkey.vim | File | 11861 bytes | August 02 2022 16:56:59. | |
autoit.vim | File | 48014 bytes | August 02 2022 16:56:59. | |
automake.vim | File | 3972 bytes | August 02 2022 16:56:59. | |
ave.vim | File | 1900 bytes | August 02 2022 16:56:59. | |
avra.vim | File | 2683 bytes | August 02 2022 16:56:59. | |
awk.vim | File | 7839 bytes | August 02 2022 16:56:59. | |
ayacc.vim | File | 2585 bytes | August 02 2022 16:56:59. | |
b.vim | File | 4902 bytes | August 02 2022 16:56:59. | |
baan.vim | File | 73595 bytes | August 02 2022 16:56:59. | |
basic.vim | File | 8128 bytes | August 02 2022 16:56:59. | |
bc.vim | File | 1791 bytes | August 02 2022 16:56:59. | |
bdf.vim | File | 3841 bytes | August 02 2022 16:56:59. | |
bib.vim | File | 6004 bytes | August 02 2022 16:56:59. | |
bindzone.vim | File | 4826 bytes | August 02 2022 16:56:59. | |
blank.vim | File | 794 bytes | August 02 2022 16:56:59. | |
bst.vim | File | 2825 bytes | August 02 2022 16:56:59. | |
btm.vim | File | 9285 bytes | August 02 2022 16:56:59. | |
bzl.vim | File | 374 bytes | August 02 2022 16:56:59. | |
bzr.vim | File | 1560 bytes | August 02 2022 16:56:59. | |
c.vim | File | 26366 bytes | August 02 2022 16:56:59. | |
cabal.vim | File | 4310 bytes | August 02 2022 16:56:59. | |
calendar.vim | File | 5042 bytes | August 02 2022 16:56:59. | |
catalog.vim | File | 921 bytes | August 02 2022 16:56:59. | |
cdl.vim | File | 3092 bytes | August 02 2022 16:56:59. | |
cdrdaoconf.vim | File | 3647 bytes | August 02 2022 16:56:59. | |
cdrtoc.vim | File | 22756 bytes | August 02 2022 16:56:59. | |
cf.vim | File | 18644 bytes | August 02 2022 16:56:59. | |
cfg.vim | File | 1351 bytes | August 02 2022 16:56:59. | |
ch.vim | File | 922 bytes | August 02 2022 16:56:59. | |
chaiscript.vim | File | 2887 bytes | August 02 2022 16:56:59. | |
change.vim | File | 901 bytes | August 02 2022 16:56:59. | |
changelog.vim | File | 2097 bytes | August 02 2022 16:56:59. | |
chaskell.vim | File | 333 bytes | August 02 2022 16:56:59. | |
cheetah.vim | File | 1752 bytes | August 02 2022 16:56:59. | |
chicken.vim | File | 2618 bytes | August 02 2022 16:56:59. | |
chill.vim | File | 8024 bytes | August 02 2022 16:56:59. | |
chordpro.vim | File | 2521 bytes | August 02 2022 16:56:59. | |
cl.vim | File | 3905 bytes | August 02 2022 16:56:59. | |
clean.vim | File | 3151 bytes | August 02 2022 16:56:59. | |
clipper.vim | File | 5576 bytes | August 02 2022 16:56:59. | |
clojure.vim | File | 41933 bytes | August 02 2022 16:56:59. | |
cmake.vim | File | 42148 bytes | August 02 2022 16:56:59. | |
cmod.vim | File | 6271 bytes | August 02 2022 16:56:59. | |
cmusrc.vim | File | 12921 bytes | August 02 2022 16:56:59. | |
cobol.vim | File | 9920 bytes | August 02 2022 16:56:59. | |
coco.vim | File | 1300 bytes | August 02 2022 16:56:59. | |
colortest.vim | File | 3201 bytes | August 02 2022 16:56:59. | |
conaryrecipe.vim | File | 8036 bytes | August 02 2022 16:56:59. | |
conf.vim | File | 799 bytes | August 02 2022 16:56:59. | |
config.vim | File | 2074 bytes | August 02 2022 16:56:59. | |
context.vim | File | 6199 bytes | August 02 2022 16:56:59. | |
cpp.vim | File | 2869 bytes | August 02 2022 16:56:59. | |
crm.vim | File | 1197 bytes | August 02 2022 16:56:59. | |
crontab.vim | File | 2215 bytes | August 02 2022 16:56:59. | |
cs.vim | File | 6090 bytes | August 02 2022 16:56:59. | |
csc.vim | File | 8449 bytes | August 02 2022 16:56:59. | |
csdl.vim | File | 23755 bytes | August 02 2022 16:56:59. | |
csh.vim | File | 6459 bytes | August 02 2022 16:56:59. | |
csp.vim | File | 7152 bytes | August 02 2022 16:56:59. | |
css.vim | File | 31941 bytes | August 02 2022 16:56:59. | |
cterm.vim | File | 6406 bytes | August 02 2022 16:56:59. | |
ctrlh.vim | File | 688 bytes | August 02 2022 16:56:59. | |
cucumber.vim | File | 31887 bytes | August 02 2022 16:56:59. | |
cuda.vim | File | 2691 bytes | August 02 2022 16:56:59. | |
cupl.vim | File | 3873 bytes | August 02 2022 16:56:59. | |
cuplsim.vim | File | 1916 bytes | August 02 2022 16:56:59. | |
cvs.vim | File | 929 bytes | August 02 2022 16:56:59. | |
cvsrc.vim | File | 1254 bytes | August 02 2022 16:56:59. | |
cweb.vim | File | 2892 bytes | August 02 2022 16:56:59. | |
cynlib.vim | File | 2548 bytes | August 02 2022 16:56:59. | |
cynpp.vim | File | 1263 bytes | August 02 2022 16:56:59. | |
d.vim | File | 28631 bytes | August 02 2022 16:56:59. | |
datascript.vim | File | 3807 bytes | August 02 2022 16:56:59. | |
dcd.vim | File | 1803 bytes | August 02 2022 16:56:59. | |
dcl.vim | File | 6343 bytes | August 02 2022 16:56:59. | |
debchangelog.vim | File | 2592 bytes | August 02 2022 16:56:59. | |
debcontrol.vim | File | 8492 bytes | August 02 2022 16:56:59. | |
debsources.vim | File | 2088 bytes | August 02 2022 16:56:59. | |
def.vim | File | 1097 bytes | August 02 2022 16:56:59. | |
denyhosts.vim | File | 7365 bytes | August 02 2022 16:56:59. | |
desc.vim | File | 3077 bytes | August 02 2022 16:56:59. | |
desktop.vim | File | 4144 bytes | August 02 2022 16:56:59. | |
dictconf.vim | File | 3118 bytes | August 02 2022 16:56:59. | |
dictdconf.vim | File | 6465 bytes | August 02 2022 16:56:59. | |
diff.vim | File | 17282 bytes | August 02 2022 16:56:59. | |
dircolors.vim | File | 6946 bytes | August 02 2022 16:56:59. | |
dirpager.vim | File | 1787 bytes | August 02 2022 16:56:59. | |
diva.vim | File | 4736 bytes | August 02 2022 16:56:59. | |
django.vim | File | 3934 bytes | August 02 2022 16:56:59. | |
dns.vim | File | 132 bytes | August 02 2022 16:56:59. | |
dnsmasq.vim | File | 10067 bytes | August 02 2022 16:56:59. | |
docbk.vim | File | 10321 bytes | August 02 2022 16:56:59. | |
docbksgml.vim | File | 193 bytes | August 02 2022 16:56:59. | |
docbkxml.vim | File | 191 bytes | August 02 2022 16:56:59. | |
dockerfile.vim | File | 673 bytes | August 02 2022 16:56:59. | |
dosbatch.vim | File | 6260 bytes | August 02 2022 16:56:59. | |
dosini.vim | File | 1138 bytes | August 02 2022 16:56:59. | |
dot.vim | File | 3018 bytes | August 02 2022 16:56:59. | |
doxygen.vim | File | 38642 bytes | August 02 2022 16:56:59. | |
dracula.vim | File | 2668 bytes | August 02 2022 16:56:59. | |
dsl.vim | File | 1312 bytes | August 02 2022 16:56:59. | |
dtd.vim | File | 4934 bytes | August 02 2022 16:56:59. | |
dtml.vim | File | 16613 bytes | August 02 2022 16:56:59. | |
dtrace.vim | File | 6442 bytes | August 02 2022 16:56:59. | |
dts.vim | File | 1210 bytes | August 02 2022 16:56:59. | |
dylan.vim | File | 3414 bytes | August 02 2022 16:56:59. | |
dylanintr.vim | File | 1078 bytes | August 02 2022 16:56:59. | |
dylanlid.vim | File | 664 bytes | August 02 2022 16:56:59. | |
ecd.vim | File | 1229 bytes | August 02 2022 16:56:59. | |
edif.vim | File | 1278 bytes | August 02 2022 16:56:59. | |
eiffel.vim | File | 6926 bytes | August 02 2022 16:56:59. | |
elf.vim | File | 2348 bytes | August 02 2022 16:56:59. | |
elinks.vim | File | 10494 bytes | August 02 2022 16:56:59. | |
elmfilt.vim | File | 2892 bytes | August 02 2022 16:56:59. | |
erlang.vim | File | 10911 bytes | August 02 2022 16:56:59. | |
eruby.vim | File | 2908 bytes | August 02 2022 16:56:59. | |
esmtprc.vim | File | 938 bytes | August 02 2022 16:56:59. | |
esqlc.vim | File | 2094 bytes | August 02 2022 16:56:59. | |
esterel.vim | File | 3053 bytes | August 02 2022 16:56:59. | |
eterm.vim | File | 19172 bytes | August 02 2022 16:56:59. | |
euphoria3.vim | File | 6103 bytes | August 02 2022 16:56:59. | |
euphoria4.vim | File | 14537 bytes | August 02 2022 16:56:59. | |
eviews.vim | File | 5004 bytes | August 02 2022 16:56:59. | |
exim.vim | File | 18085 bytes | August 02 2022 16:56:59. | |
expect.vim | File | 3734 bytes | August 02 2022 16:56:59. | |
exports.vim | File | 1747 bytes | August 02 2022 16:56:59. | |
falcon.vim | File | 12013 bytes | August 02 2022 16:56:59. | |
fan.vim | File | 5445 bytes | August 02 2022 16:56:59. | |
fasm.vim | File | 8757 bytes | August 02 2022 16:56:59. | |
fdcc.vim | File | 5648 bytes | August 02 2022 16:56:59. | |
fetchmail.vim | File | 3308 bytes | August 02 2022 16:56:59. | |
fgl.vim | File | 7274 bytes | August 02 2022 16:56:59. | |
flexwiki.vim | File | 5435 bytes | August 02 2022 16:56:59. | |
focexec.vim | File | 3525 bytes | August 02 2022 16:56:59. | |
form.vim | File | 6385 bytes | August 02 2022 16:56:59. | |
forth.vim | File | 10669 bytes | August 02 2022 16:56:59. | |
fortran.vim | File | 32566 bytes | August 02 2022 16:56:59. | |
foxpro.vim | File | 32856 bytes | August 02 2022 16:56:59. | |
framescript.vim | File | 11679 bytes | August 02 2022 16:56:59. | |
freebasic.vim | File | 10512 bytes | August 02 2022 16:56:59. | |
fstab.vim | File | 15888 bytes | August 02 2022 16:56:59. | |
fvwm.vim | File | 25026 bytes | August 02 2022 16:56:59. | |
fvwm2m4.vim | File | 711 bytes | August 02 2022 16:56:59. | |
gdb.vim | File | 4366 bytes | August 02 2022 16:56:59. | |
gdmo.vim | File | 3299 bytes | August 02 2022 16:56:59. | |
gedcom.vim | File | 2275 bytes | August 02 2022 16:56:59. | |
git.vim | File | 4156 bytes | August 02 2022 16:56:59. | |
gitcommit.vim | File | 4867 bytes | August 02 2022 16:56:59. | |
gitconfig.vim | File | 1616 bytes | August 02 2022 16:56:59. | |
gitolite.vim | File | 4454 bytes | August 02 2022 16:56:59. | |
gitrebase.vim | File | 1852 bytes | August 02 2022 16:56:59. | |
gitsendemail.vim | File | 580 bytes | August 02 2022 16:56:59. | |
gkrellmrc.vim | File | 4116 bytes | August 02 2022 16:56:59. | |
gnash.vim | File | 3462 bytes | August 02 2022 16:56:59. | |
gnuplot.vim | File | 23663 bytes | August 02 2022 16:56:59. | |
go.vim | File | 7904 bytes | August 02 2022 16:56:59. | |
godoc.vim | File | 352 bytes | August 02 2022 16:56:59. | |
gp.vim | File | 2965 bytes | August 02 2022 16:56:59. | |
gpg.vim | File | 5591 bytes | August 02 2022 16:56:59. | |
gprof.vim | File | 2117 bytes | August 02 2022 16:56:59. | |
grads.vim | File | 1742 bytes | August 02 2022 16:56:59. | |
gretl.vim | File | 3730 bytes | August 02 2022 16:56:59. | |
groff.vim | File | 292 bytes | August 02 2022 16:56:59. | |
groovy.vim | File | 22290 bytes | August 02 2022 16:56:59. | |
group.vim | File | 1719 bytes | August 02 2022 16:56:59. | |
grub.vim | File | 3882 bytes | August 02 2022 16:56:59. | |
gsp.vim | File | 2031 bytes | August 02 2022 16:56:59. | |
gtkrc.vim | File | 9318 bytes | August 02 2022 16:56:59. | |
haml.vim | File | 7067 bytes | August 02 2022 16:56:59. | |
hamster.vim | File | 13840 bytes | August 02 2022 16:56:59. | |
haskell.vim | File | 8907 bytes | August 02 2022 16:56:59. | |
haste.vim | File | 4994 bytes | August 02 2022 16:56:59. | |
hastepreproc.vim | File | 1422 bytes | August 02 2022 16:56:59. | |
hb.vim | File | 3158 bytes | August 02 2022 16:56:59. | |
help.vim | File | 8348 bytes | August 02 2022 16:56:59. | |
hercules.vim | File | 5720 bytes | August 02 2022 16:56:59. | |
hex.vim | File | 4011 bytes | August 02 2022 16:56:59. | |
hgcommit.vim | File | 1114 bytes | August 02 2022 16:56:59. | |
hitest.vim | File | 3294 bytes | August 02 2022 16:56:59. | |
hog.vim | File | 10672 bytes | August 02 2022 16:56:59. | |
hostconf.vim | File | 3870 bytes | August 02 2022 16:56:59. | |
hostsaccess.vim | File | 549 bytes | August 02 2022 16:56:59. | |
html.vim | File | 17240 bytes | August 02 2022 16:56:59. | |
htmlcheetah.vim | File | 488 bytes | August 02 2022 16:56:59. | |
htmldjango.vim | File | 1011 bytes | August 02 2022 16:56:59. | |
htmlm4.vim | File | 670 bytes | August 02 2022 16:56:59. | |
htmlos.vim | File | 8313 bytes | August 02 2022 16:56:59. | |
ia64.vim | File | 10547 bytes | August 02 2022 16:56:59. | |
ibasic.vim | File | 7036 bytes | August 02 2022 16:56:59. | |
icemenu.vim | File | 824 bytes | August 02 2022 16:56:59. | |
icon.vim | File | 6976 bytes | August 02 2022 16:56:59. | |
idl.vim | File | 19901 bytes | August 02 2022 16:56:59. | |
idlang.vim | File | 13462 bytes | August 02 2022 16:56:59. | |
indent.vim | File | 7171 bytes | August 02 2022 16:56:59. | |
inform.vim | File | 19483 bytes | August 02 2022 16:56:59. | |
initex.vim | File | 19224 bytes | August 02 2022 16:56:59. | |
initng.vim | File | 3398 bytes | August 02 2022 16:56:59. | |
inittab.vim | File | 2619 bytes | August 02 2022 16:56:59. | |
ipfilter.vim | File | 1622 bytes | August 02 2022 16:56:59. | |
ishd.vim | File | 27057 bytes | August 02 2022 16:56:59. | |
iss.vim | File | 4988 bytes | August 02 2022 16:56:59. | |
ist.vim | File | 2000 bytes | August 02 2022 16:56:59. | |
j.vim | File | 9375 bytes | August 02 2022 16:56:59. | |
jal.vim | File | 8963 bytes | August 02 2022 16:56:59. | |
jam.vim | File | 26711 bytes | August 02 2022 16:56:59. | |
jargon.vim | File | 611 bytes | August 02 2022 16:56:59. | |
java.vim | File | 17979 bytes | August 02 2022 16:56:59. | |
javacc.vim | File | 2256 bytes | August 02 2022 16:56:59. | |
javascript.vim | File | 5084 bytes | August 02 2022 16:56:59. | |
jess.vim | File | 6230 bytes | August 02 2022 16:56:59. | |
jgraph.vim | File | 1212 bytes | August 02 2022 16:56:59. | |
jovial.vim | File | 4107 bytes | August 02 2022 16:56:59. | |
jproperties.vim | File | 5496 bytes | August 02 2022 16:56:59. | |
json.vim | File | 6018 bytes | August 02 2022 16:56:59. | |
jsp.vim | File | 2678 bytes | August 02 2022 16:56:59. | |
kconfig.vim | File | 36304 bytes | August 02 2022 16:56:59. | |
kivy.vim | File | 986 bytes | August 02 2022 16:56:59. | |
kix.vim | File | 6329 bytes | August 02 2022 16:56:59. | |
kscript.vim | File | 1985 bytes | August 02 2022 16:56:59. | |
kwt.vim | File | 2454 bytes | August 02 2022 16:56:59. | |
lace.vim | File | 4075 bytes | August 02 2022 16:56:59. | |
latte.vim | File | 3511 bytes | August 02 2022 16:56:59. | |
ld.vim | File | 2902 bytes | August 02 2022 16:56:59. | |
ldapconf.vim | File | 13302 bytes | August 02 2022 16:56:59. | |
ldif.vim | File | 1014 bytes | August 02 2022 16:56:59. | |
less.vim | File | 4230 bytes | August 02 2022 16:56:59. | |
lex.vim | File | 6728 bytes | August 02 2022 16:56:59. | |
lftp.vim | File | 7471 bytes | August 02 2022 16:56:59. | |
lhaskell.vim | File | 4435 bytes | August 02 2022 16:56:59. | |
libao.vim | File | 636 bytes | August 02 2022 16:56:59. | |
lifelines.vim | File | 6640 bytes | August 02 2022 16:56:59. | |
lilo.vim | File | 10427 bytes | August 02 2022 16:56:59. | |
limits.vim | File | 1317 bytes | August 02 2022 16:56:59. | |
liquid.vim | File | 6184 bytes | August 02 2022 16:56:59. | |
lisp.vim | File | 35810 bytes | August 02 2022 16:56:59. | |
lite.vim | File | 4845 bytes | August 02 2022 16:56:59. | |
litestep.vim | File | 6676 bytes | August 02 2022 16:56:59. | |
loginaccess.vim | File | 4197 bytes | August 02 2022 16:56:59. | |
logindefs.vim | File | 7537 bytes | August 02 2022 16:56:59. | |
logtalk.vim | File | 16039 bytes | August 02 2022 16:56:59. | |
lotos.vim | File | 2361 bytes | August 02 2022 16:56:59. | |
lout.vim | File | 4325 bytes | August 02 2022 16:56:59. | |
lpc.vim | File | 23138 bytes | August 02 2022 16:56:59. | |
lprolog.vim | File | 3979 bytes | August 02 2022 16:56:59. | |
lscript.vim | File | 12099 bytes | August 02 2022 16:56:59. | |
lsl.vim | File | 15800 bytes | August 02 2022 16:56:59. | |
lss.vim | File | 4870 bytes | August 02 2022 16:56:59. | |
lua.vim | File | 14052 bytes | August 02 2022 16:56:59. | |
lynx.vim | File | 6579 bytes | August 02 2022 16:56:59. | |
m4.vim | File | 2693 bytes | August 02 2022 16:56:59. | |
mail.vim | File | 6069 bytes | August 02 2022 16:56:59. | |
mailaliases.vim | File | 2767 bytes | August 02 2022 16:56:59. | |
mailcap.vim | File | 1135 bytes | August 02 2022 16:56:59. | |
make.vim | File | 6197 bytes | August 02 2022 16:56:59. | |
mallard.vim | File | 1726 bytes | August 02 2022 16:56:59. | |
man.vim | File | 1590 bytes | August 02 2022 16:56:59. | |
manconf.vim | File | 4344 bytes | August 02 2022 16:56:59. | |
manual.vim | File | 909 bytes | August 02 2022 16:56:59. | |
maple.vim | File | 28529 bytes | August 02 2022 16:56:59. | |
markdown.vim | File | 8052 bytes | August 02 2022 16:56:59. | |
masm.vim | File | 17225 bytes | August 02 2022 16:56:59. | |
mason.vim | File | 3818 bytes | August 02 2022 16:56:59. | |
master.vim | File | 1022 bytes | August 02 2022 16:56:59. | |
matlab.vim | File | 4133 bytes | August 02 2022 16:56:59. | |
maxima.vim | File | 18802 bytes | August 02 2022 16:56:59. | |
mel.vim | File | 3406 bytes | August 02 2022 16:56:59. | |
messages.vim | File | 2653 bytes | August 02 2022 16:56:59. | |
mf.vim | File | 15423 bytes | August 02 2022 16:56:59. | |
mgl.vim | File | 3724 bytes | August 02 2022 16:56:59. | |
mgp.vim | File | 2000 bytes | August 02 2022 16:56:59. | |
mib.vim | File | 2696 bytes | August 02 2022 16:56:59. | |
mix.vim | File | 2942 bytes | August 02 2022 16:56:59. | |
mma.vim | File | 11799 bytes | August 02 2022 16:56:59. | |
mmix.vim | File | 4968 bytes | August 02 2022 16:56:59. | |
mmp.vim | File | 1486 bytes | August 02 2022 16:56:59. | |
modconf.vim | File | 1419 bytes | August 02 2022 16:56:59. | |
model.vim | File | 1469 bytes | August 02 2022 16:56:59. | |
modsim3.vim | File | 3623 bytes | August 02 2022 16:56:59. | |
modula2.vim | File | 3225 bytes | August 02 2022 16:56:59. | |
modula3.vim | File | 2012 bytes | August 02 2022 16:56:59. | |
monk.vim | File | 10219 bytes | August 02 2022 16:56:59. | |
moo.vim | File | 9234 bytes | August 02 2022 16:56:59. | |
mp.vim | File | 44530 bytes | August 02 2022 16:56:59. | |
mplayerconf.vim | File | 7487 bytes | August 02 2022 16:56:59. | |
mrxvtrc.vim | File | 9603 bytes | August 02 2022 16:56:59. | |
msidl.vim | File | 3464 bytes | August 02 2022 16:56:59. | |
msmessages.vim | File | 6318 bytes | August 02 2022 16:56:59. | |
msql.vim | File | 2390 bytes | August 02 2022 16:56:59. | |
mupad.vim | File | 15476 bytes | August 02 2022 16:56:59. | |
murphi.vim | File | 4619 bytes | August 02 2022 16:56:59. | |
mush.vim | File | 13187 bytes | August 02 2022 16:56:59. | |
muttrc.vim | File | 64055 bytes | August 02 2022 16:56:59. | |
mysql.vim | File | 17609 bytes | August 02 2022 16:56:59. | |
n1ql.vim | File | 12899 bytes | August 02 2022 16:56:59. | |
named.vim | File | 9991 bytes | August 02 2022 16:56:59. | |
nanorc.vim | File | 10620 bytes | August 02 2022 16:56:59. | |
nasm.vim | File | 26285 bytes | August 02 2022 16:56:59. | |
nastran.vim | File | 8504 bytes | August 02 2022 16:56:59. | |
natural.vim | File | 6977 bytes | August 02 2022 16:56:59. | |
ncf.vim | File | 13416 bytes | August 02 2022 16:56:59. | |
neomuttrc.vim | File | 79227 bytes | August 02 2022 16:56:59. | |
netrc.vim | File | 1934 bytes | August 02 2022 16:56:59. | |
netrw.vim | File | 7219 bytes | August 02 2022 16:56:59. | |
ninja.vim | File | 2889 bytes | August 02 2022 16:56:59. | |
nosyntax.vim | File | 755 bytes | August 02 2022 16:56:59. | |
nqc.vim | File | 14068 bytes | August 02 2022 16:56:59. | |
nroff.vim | File | 7775 bytes | August 02 2022 16:56:59. | |
nsis.vim | File | 33906 bytes | August 02 2022 16:56:59. | |
obj.vim | File | 2786 bytes | August 02 2022 16:56:59. | |
objc.vim | File | 41720 bytes | August 02 2022 16:56:59. | |
objcpp.vim | File | 600 bytes | August 02 2022 16:56:59. | |
ocaml.vim | File | 13541 bytes | August 02 2022 16:56:59. | |
occam.vim | File | 4316 bytes | August 02 2022 16:56:59. | |
omnimark.vim | File | 6377 bytes | August 02 2022 16:56:59. | |
openroad.vim | File | 13979 bytes | August 02 2022 16:56:59. | |
opl.vim | File | 4128 bytes | August 02 2022 16:56:59. | |
ora.vim | File | 27141 bytes | August 02 2022 16:56:59. | |
pamconf.vim | File | 5546 bytes | August 02 2022 16:56:59. | |
papp.vim | File | 3789 bytes | August 02 2022 16:56:59. | |
pascal.vim | File | 15008 bytes | August 02 2022 16:56:59. | |
passwd.vim | File | 2443 bytes | August 02 2022 16:56:59. | |
pcap.vim | File | 1496 bytes | August 02 2022 16:56:59. | |
pccts.vim | File | 4093 bytes | August 02 2022 16:56:59. | |
pdf.vim | File | 3539 bytes | August 02 2022 16:56:59. | |
perl.vim | File | 38470 bytes | August 02 2022 16:56:59. | |
perl6.vim | File | 74127 bytes | August 02 2022 16:56:59. | |
pf.vim | File | 5294 bytes | August 02 2022 16:56:59. | |
pfmain.vim | File | 92737 bytes | August 02 2022 16:56:59. | |
php.vim | File | 80429 bytes | August 02 2022 16:56:59. | |
phtml.vim | File | 151 bytes | August 02 2022 16:56:59. | |
pic.vim | File | 3333 bytes | August 02 2022 16:56:59. | |
pike.vim | File | 21807 bytes | August 02 2022 16:56:59. | |
pilrc.vim | File | 5311 bytes | August 02 2022 16:56:59. | |
pine.vim | File | 15411 bytes | August 02 2022 16:56:59. | |
pinfo.vim | File | 5296 bytes | August 02 2022 16:56:59. | |
plaintex.vim | File | 10301 bytes | August 02 2022 16:56:59. | |
pli.vim | File | 13222 bytes | August 02 2022 16:56:59. | |
plm.vim | File | 5361 bytes | August 02 2022 16:56:59. | |
plp.vim | File | 1267 bytes | August 02 2022 16:56:59. | |
plsql.vim | File | 12918 bytes | August 02 2022 16:56:59. | |
po.vim | File | 6393 bytes | August 02 2022 16:56:59. | |
pod.vim | File | 7283 bytes | August 02 2022 16:56:59. | |
postscr.vim | File | 46133 bytes | August 02 2022 16:56:59. | |
pov.vim | File | 9057 bytes | August 02 2022 16:56:59. | |
povini.vim | File | 3488 bytes | August 02 2022 16:56:59. | |
ppd.vim | File | 868 bytes | August 02 2022 16:56:59. | |
ppwiz.vim | File | 2780 bytes | August 02 2022 16:56:59. | |
prescribe.vim | File | 2383 bytes | August 02 2022 16:56:59. | |
privoxy.vim | File | 3579 bytes | August 02 2022 16:56:59. | |
procmail.vim | File | 2019 bytes | August 02 2022 16:56:59. | |
progress.vim | File | 31748 bytes | August 02 2022 16:56:59. | |
prolog.vim | File | 4360 bytes | August 02 2022 16:56:59. | |
promela.vim | File | 1728 bytes | August 02 2022 16:56:59. | |
proto.vim | File | 2933 bytes | August 02 2022 16:56:59. | |
protocols.vim | File | 1429 bytes | August 02 2022 16:56:59. | |
psf.vim | File | 4290 bytes | August 02 2022 16:56:59. | |
ptcap.vim | File | 4128 bytes | August 02 2022 16:56:59. | |
purifylog.vim | File | 3357 bytes | August 02 2022 16:56:59. | |
pyrex.vim | File | 1663 bytes | August 02 2022 16:56:59. | |
python.vim | File | 14280 bytes | August 02 2022 16:56:59. | |
qf.vim | File | 596 bytes | August 02 2022 16:56:59. | |
quake.vim | File | 8554 bytes | August 02 2022 16:56:59. | |
r.vim | File | 14316 bytes | August 02 2022 16:56:59. | |
racc.vim | File | 5619 bytes | August 02 2022 16:56:59. | |
radiance.vim | File | 7155 bytes | August 02 2022 16:56:59. | |
ratpoison.vim | File | 17221 bytes | August 02 2022 16:56:59. | |
rc.vim | File | 10217 bytes | August 02 2022 16:56:59. | |
rcs.vim | File | 2133 bytes | August 02 2022 16:56:59. | |
rcslog.vim | File | 557 bytes | August 02 2022 16:56:59. | |
readline.vim | File | 16999 bytes | August 02 2022 16:56:59. | |
rebol.vim | File | 7167 bytes | August 02 2022 16:56:59. | |
redif.vim | File | 87942 bytes | August 02 2022 16:56:59. | |
registry.vim | File | 3355 bytes | August 02 2022 16:56:59. | |
remind.vim | File | 2713 bytes | August 02 2022 16:56:59. | |
resolv.vim | File | 3019 bytes | August 02 2022 16:56:59. | |
reva.vim | File | 7581 bytes | August 02 2022 16:56:59. | |
rexx.vim | File | 15331 bytes | August 02 2022 16:56:59. | |
rhelp.vim | File | 12134 bytes | August 02 2022 16:56:59. | |
rib.vim | File | 2192 bytes | August 02 2022 16:56:59. | |
rmd.vim | File | 4406 bytes | August 02 2022 16:56:59. | |
rnc.vim | File | 2263 bytes | August 02 2022 16:56:59. | |
rng.vim | File | 817 bytes | August 02 2022 16:56:59. | |
rnoweb.vim | File | 1908 bytes | August 02 2022 16:56:59. | |
robots.vim | File | 1529 bytes | August 02 2022 16:56:59. | |
rpcgen.vim | File | 1666 bytes | August 02 2022 16:56:59. | |
rpl.vim | File | 25699 bytes | August 02 2022 16:56:59. | |
rrst.vim | File | 1305 bytes | August 02 2022 16:56:59. | |
rst.vim | File | 8834 bytes | August 02 2022 16:56:59. | |
rtf.vim | File | 2330 bytes | August 02 2022 16:56:59. | |
ruby.vim | File | 40643 bytes | August 02 2022 16:56:59. | |
rust.vim | File | 16612 bytes | August 02 2022 16:56:59. | |
samba.vim | File | 6131 bytes | August 02 2022 16:56:59. | |
sas.vim | File | 34087 bytes | August 02 2022 16:56:59. | |
sass.vim | File | 6323 bytes | August 02 2022 16:56:59. | |
sather.vim | File | 3490 bytes | August 02 2022 16:56:59. | |
sbt.vim | File | 880 bytes | August 02 2022 16:56:59. | |
scala.vim | File | 11307 bytes | August 02 2022 16:56:59. | |
scheme.vim | File | 19330 bytes | August 02 2022 16:56:59. | |
scilab.vim | File | 3210 bytes | August 02 2022 16:56:59. | |
screen.vim | File | 9104 bytes | August 02 2022 16:56:59. | |
scss.vim | File | 409 bytes | August 02 2022 16:56:59. | |
sd.vim | File | 2223 bytes | August 02 2022 16:56:59. | |
sdc.vim | File | 1391 bytes | August 02 2022 16:56:59. | |
sdl.vim | File | 6563 bytes | August 02 2022 16:56:59. | |
sed.vim | File | 5033 bytes | August 02 2022 16:56:59. | |
sendpr.vim | File | 905 bytes | August 02 2022 16:56:59. | |
sensors.vim | File | 1513 bytes | August 02 2022 16:56:59. | |
services.vim | File | 1823 bytes | August 02 2022 16:56:59. | |
setserial.vim | File | 5229 bytes | August 02 2022 16:56:59. | |
sgml.vim | File | 8866 bytes | August 02 2022 16:56:59. | |
sgmldecl.vim | File | 2041 bytes | August 02 2022 16:56:59. | |
sgmllnx.vim | File | 1851 bytes | August 02 2022 16:56:59. | |
sh.vim | File | 40497 bytes | August 02 2022 16:56:59. | |
sicad.vim | File | 18475 bytes | August 02 2022 16:56:59. | |
sieve.vim | File | 1671 bytes | August 02 2022 16:56:59. | |
simula.vim | File | 3371 bytes | August 02 2022 16:56:59. | |
sinda.vim | File | 3666 bytes | August 02 2022 16:56:59. | |
sindacmp.vim | File | 1274 bytes | August 02 2022 16:56:59. | |
sindaout.vim | File | 1961 bytes | August 02 2022 16:56:59. | |
sisu.vim | File | 22180 bytes | August 02 2022 16:56:59. | |
skill.vim | File | 25769 bytes | August 02 2022 16:56:59. | |
sl.vim | File | 4084 bytes | August 02 2022 16:56:59. | |
slang.vim | File | 3302 bytes | August 02 2022 16:56:59. | |
slice.vim | File | 2928 bytes | August 02 2022 16:56:59. | |
slpconf.vim | File | 11791 bytes | August 02 2022 16:56:59. | |
slpreg.vim | File | 5346 bytes | August 02 2022 16:56:59. | |
slpspi.vim | File | 1181 bytes | August 02 2022 16:56:59. | |
slrnrc.vim | File | 12811 bytes | August 02 2022 16:56:59. | |
slrnsc.vim | File | 3098 bytes | August 02 2022 16:56:59. | |
sm.vim | File | 2850 bytes | August 02 2022 16:56:59. | |
smarty.vim | File | 2883 bytes | August 02 2022 16:56:59. | |
smcl.vim | File | 12043 bytes | August 02 2022 16:56:59. | |
smil.vim | File | 5616 bytes | August 02 2022 16:56:59. | |
smith.vim | File | 793 bytes | August 02 2022 16:56:59. | |
sml.vim | File | 9328 bytes | August 02 2022 16:56:59. | |
snnsnet.vim | File | 2482 bytes | August 02 2022 16:56:59. | |
snnspat.vim | File | 2228 bytes | August 02 2022 16:56:59. | |
snnsres.vim | File | 1933 bytes | August 02 2022 16:56:59. | |
snobol4.vim | File | 5334 bytes | August 02 2022 16:56:59. | |
spec.vim | File | 12628 bytes | August 02 2022 16:56:59. | |
specman.vim | File | 7345 bytes | August 02 2022 16:56:59. | |
spice.vim | File | 2243 bytes | August 02 2022 16:56:59. | |
splint.vim | File | 15786 bytes | August 02 2022 16:56:59. | |
spup.vim | File | 13926 bytes | August 02 2022 16:56:59. | |
spyce.vim | File | 4455 bytes | August 02 2022 16:56:59. | |
sql.vim | File | 1120 bytes | August 02 2022 16:56:59. | |
sqlanywhere.vim | File | 41929 bytes | August 02 2022 16:56:59. | |
sqlforms.vim | File | 6734 bytes | August 02 2022 16:56:59. | |
sqlhana.vim | File | 11027 bytes | August 02 2022 16:56:59. | |
sqlinformix.vim | File | 5901 bytes | August 02 2022 16:56:59. | |
sqlj.vim | File | 2970 bytes | August 02 2022 16:56:59. | |
sqloracle.vim | File | 7243 bytes | August 02 2022 16:56:59. | |
sqr.vim | File | 13012 bytes | August 02 2022 16:56:59. | |
squid.vim | File | 6931 bytes | August 02 2022 16:56:59. | |
srec.vim | File | 3815 bytes | August 02 2022 16:56:59. | |
sshconfig.vim | File | 10579 bytes | August 02 2022 16:56:59. | |
sshdconfig.vim | File | 11092 bytes | August 02 2022 16:56:59. | |
st.vim | File | 2752 bytes | August 02 2022 16:56:59. | |
stata.vim | File | 27056 bytes | August 02 2022 16:56:59. | |
stp.vim | File | 5427 bytes | August 02 2022 16:56:59. | |
strace.vim | File | 1970 bytes | August 02 2022 16:56:59. | |
sudoers.vim | File | 22053 bytes | August 02 2022 16:56:59. | |
svg.vim | File | 436 bytes | August 02 2022 16:56:59. | |
svn.vim | File | 1852 bytes | August 02 2022 16:56:59. | |
syncolor.vim | File | 4093 bytes | August 02 2022 16:56:59. | |
synload.vim | File | 1984 bytes | August 02 2022 16:56:59. | |
syntax.vim | File | 1228 bytes | August 02 2022 16:56:59. | |
sysctl.vim | File | 1153 bytes | August 02 2022 16:56:59. | |
systemd.vim | File | 184 bytes | August 02 2022 16:56:59. | |
systemverilog.vim | File | 3539 bytes | August 02 2022 16:56:59. | |
tads.vim | File | 6862 bytes | August 02 2022 16:56:59. | |
tags.vim | File | 1155 bytes | August 02 2022 16:56:59. | |
tak.vim | File | 2920 bytes | August 02 2022 16:56:59. | |
takcmp.vim | File | 1593 bytes | August 02 2022 16:56:59. | |
takout.vim | File | 2000 bytes | August 02 2022 16:56:59. | |
tap.vim | File | 4362 bytes | August 02 2022 16:56:59. | |
tar.vim | File | 373 bytes | August 02 2022 16:56:59. | |
taskdata.vim | File | 1207 bytes | August 02 2022 16:56:59. | |
taskedit.vim | File | 1130 bytes | August 02 2022 16:56:59. | |
tasm.vim | File | 5672 bytes | August 02 2022 16:56:59. | |
tcl.vim | File | 17286 bytes | August 02 2022 16:56:59. | |
tcsh.vim | File | 13269 bytes | August 02 2022 16:56:59. | |
teraterm.vim | File | 4938 bytes | August 02 2022 16:56:59. | |
terminfo.vim | File | 4803 bytes | August 02 2022 16:56:59. | |
tex.vim | File | 66689 bytes | August 02 2022 16:56:59. | |
texinfo.vim | File | 25568 bytes | August 02 2022 16:56:59. | |
texmf.vim | File | 2281 bytes | August 02 2022 16:56:59. | |
tf.vim | File | 6904 bytes | August 02 2022 16:56:59. | |
tidy.vim | File | 5927 bytes | August 02 2022 16:56:59. | |
tilde.vim | File | 1538 bytes | August 02 2022 16:56:59. | |
tli.vim | File | 1658 bytes | August 02 2022 16:56:59. | |
tmux.vim | File | 6413 bytes | August 02 2022 16:56:59. | |
tpp.vim | File | 3481 bytes | August 02 2022 16:56:59. | |
trasys.vim | File | 5033 bytes | August 02 2022 16:56:59. | |
treetop.vim | File | 3668 bytes | August 02 2022 16:56:59. | |
trustees.vim | File | 1546 bytes | August 02 2022 16:56:59. | |
tsalt.vim | File | 8325 bytes | August 02 2022 16:56:59. | |
tsscl.vim | File | 5120 bytes | August 02 2022 16:56:59. | |
tssgm.vim | File | 2787 bytes | August 02 2022 16:56:59. | |
tssop.vim | File | 1785 bytes | August 02 2022 16:56:59. | |
tt2.vim | File | 7923 bytes | August 02 2022 16:56:59. | |
tt2html.vim | File | 516 bytes | August 02 2022 16:56:59. | |
tt2js.vim | File | 522 bytes | August 02 2022 16:56:59. | |
uc.vim | File | 6634 bytes | August 02 2022 16:56:59. | |
udevconf.vim | File | 1227 bytes | August 02 2022 16:56:59. | |
udevperm.vim | File | 2409 bytes | August 02 2022 16:56:59. | |
udevrules.vim | File | 6960 bytes | August 02 2022 16:56:59. | |
uil.vim | File | 2821 bytes | August 02 2022 16:56:59. | |
updatedb.vim | File | 1220 bytes | August 02 2022 16:56:59. | |
upstart.vim | File | 3151 bytes | August 02 2022 16:56:59. | |
upstreamdat.vim | File | 14048 bytes | August 02 2022 16:56:59. | |
upstreaminstalllog.vim | File | 971 bytes | August 02 2022 16:56:59. | |
upstreamlog.vim | File | 2620 bytes | August 02 2022 16:56:59. | |
upstreamrpt.vim | File | 14197 bytes | August 02 2022 16:56:59. | |
usserverlog.vim | File | 3118 bytes | August 02 2022 16:56:59. | |
usw2kagtlog.vim | File | 2702 bytes | August 02 2022 16:56:59. | |
valgrind.vim | File | 3250 bytes | August 02 2022 16:56:59. | |
vb.vim | File | 20299 bytes | August 02 2022 16:56:59. | |
vera.vim | File | 19552 bytes | August 02 2022 16:56:59. | |
verilog.vim | File | 5055 bytes | August 02 2022 16:56:59. | |
verilogams.vim | File | 6083 bytes | August 02 2022 16:56:59. | |
vgrindefs.vim | File | 1214 bytes | August 02 2022 16:56:59. | |
vhdl.vim | File | 9389 bytes | August 02 2022 16:56:59. | |
vim.vim | File | 68220 bytes | August 02 2022 16:56:59. | |
viminfo.vim | File | 1241 bytes | August 02 2022 16:56:59. | |
virata.vim | File | 11613 bytes | August 02 2022 16:56:59. | |
vmasm.vim | File | 8512 bytes | August 02 2022 16:56:59. | |
voscm.vim | File | 6975 bytes | August 02 2022 16:56:59. | |
vrml.vim | File | 12788 bytes | August 02 2022 16:56:59. | |
vroom.vim | File | 3492 bytes | August 02 2022 16:56:59. | |
vsejcl.vim | File | 1004 bytes | August 02 2022 16:56:59. | |
wdiff.vim | File | 716 bytes | August 02 2022 16:56:59. | |
web.vim | File | 1114 bytes | August 02 2022 16:56:59. | |
webmacro.vim | File | 3130 bytes | August 02 2022 16:56:59. | |
wget.vim | File | 3961 bytes | August 02 2022 16:56:59. | |
whitespace.vim | File | 357 bytes | August 02 2022 16:56:59. | |
winbatch.vim | File | 12152 bytes | August 02 2022 16:56:59. | |
wml.vim | File | 5731 bytes | August 02 2022 16:56:59. | |
wsh.vim | File | 1242 bytes | August 02 2022 16:56:59. | |
wsml.vim | File | 5400 bytes | August 02 2022 16:56:59. | |
wvdial.vim | File | 1093 bytes | August 02 2022 16:56:59. | |
xbl.vim | File | 568 bytes | August 02 2022 16:56:59. | |
xdefaults.vim | File | 5887 bytes | August 02 2022 16:56:59. | |
xf86conf.vim | File | 14725 bytes | August 02 2022 16:56:59. | |
xhtml.vim | File | 186 bytes | August 02 2022 16:56:59. | |
xinetd.vim | File | 14208 bytes | August 02 2022 16:56:59. | |
xkb.vim | File | 3320 bytes | August 02 2022 16:56:59. | |
xmath.vim | File | 10829 bytes | August 02 2022 16:56:59. | |
xml.vim | File | 8609 bytes | August 02 2022 16:56:59. | |
xmodmap.vim | File | 46511 bytes | August 02 2022 16:56:59. | |
xpm.vim | File | 4403 bytes | August 02 2022 16:56:59. | |
xpm2.vim | File | 4697 bytes | August 02 2022 16:56:59. | |
xquery.vim | File | 7191 bytes | August 02 2022 16:56:59. | |
xs.vim | File | 246745 bytes | August 02 2022 16:56:59. | |
xsd.vim | File | 2125 bytes | August 02 2022 16:56:59. | |
xslt.vim | File | 2166 bytes | August 02 2022 16:56:59. | |
xxd.vim | File | 766 bytes | August 02 2022 16:56:59. | |
yacc.vim | File | 5513 bytes | August 02 2022 16:56:59. | |
yaml.vim | File | 12864 bytes | August 02 2022 16:56:59. | |
z8a.vim | File | 2894 bytes | August 02 2022 16:56:59. | |
zimbu.vim | File | 6446 bytes | August 02 2022 16:56:59. | |
zsh.vim | File | 23489 bytes | August 02 2022 16:56:59. |
" Vim syntax file " Language: Perl 6 " Maintainer: vim-perl <vim-perl@googlegroups.com> " Homepage: http://github.com/vim-perl/vim-perl/tree/master " Bugs/requests: http://github.com/vim-perl/vim-perl/issues " Last Change: 2013-07-21 " Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org> " Moritz Lenz <moritz@faui2k3.org> " Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> " " This is a big undertaking. Perl 6 is the sort of language that only Perl " can parse. But I'll do my best to get vim to. " " You can associate the extension ".pl" with the filetype "perl6" by setting " autocmd BufNewFile,BufRead *.pl setf perl6 " in your ~/.vimrc. But that will infringe on Perl 5, so you might want to " put a modeline near the beginning or end of your Perl 6 files instead: " # vim: filetype=perl6 " TODO: " * Deal with s:Perl5// " * m:s// is a match, not a substitution " * Make these highlight as strings, not operators: " <==> <=:=> <===> <=~> <« »> «>» «<» " * Allow more keywords to match as function calls(leave() is export(), etc) " * Optimization: use nextgroup instead of lookaround (:help syn-nextgroup) " * Fix s''' substitutions being matched as package names " * Match s/// and m/// better, so things like "$s/" won't match " * Add more support for folding (:help syn-fold) " * Add more syntax syncing hooks (:help syn-sync) " * Q//: " :to, :heredoc " interpolate \q:s{$scalar} (though the spec isn't very clear on it) " " Impossible TODO?: " * Unspace " * Unicode bracketing characters for quoting (there are so many) " * Various tricks depending on context. I.e. we can't know when Perl " expects «*» to be a string or a hyperoperator. The latter is presumably " more common, so that's what we assume. " * Selective highlighting of Pod formatting codes with the :allow option " * Arbitrary number, order, and negation of adverbs to Q//, q//, qq//. " Currently only the first adverb is considered significant. Anything " more would require an exponential amount of regexes, making this " already slow syntax file even slower. " " If you want to have Pir code inside Q:PIR// strings highlighted, do: " let perl6_embedded_pir=1 " " The above requires pir.vim, which you can find in Parrot's repository: " https://svn.parrot.org/parrot/trunk/editor/ " " Some less than crucial things have been made optional to speed things up. " Look at the comments near the if/else branches in this file to see exactly " which features are affected. "perl6_extended_all" enables everything. " " The defaults are: " " unlet perl6_extended_comments " unlet perl6_extended_q " unlet perl6_extended_all " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif let s:keepcpo= &cpo set cpo&vim " identifiers syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*" " This is used in the for loops below " Don't use the "syn keyword" construct because that always has higher " priority than matches/regions, so the words can't be autoquoted with " the "=>" and "p5=>" operators. All the lookaround stuff is to make sure " we don't match them as part of some other identifier. let s:before_keyword = " display \"\\%(\\k\\|\\K\\@<=[-']\\)\\@<!\\%(" let s:after_keyword = "\\)\\%(\\k\\|[-']\\K\\@=\\)\\@!\"" " Billions of keywords let s:keywords = { \ "p6Attention": [ \ "ACHTUNG ATTN ATTENTION FIXME NB TODO TBD WTF XXX NOTE", \ ], \ "p6DeclareRoutine": [ \ "macro sub submethod method multi proto only rule token regex category", \ ], \ "p6Module": [ \ "module class role package enum grammar slang subset", \ ], \ "p6Variable": [ \ "self", \ ], \ "p6Include": [ \ "use require", \ ], \ "p6Conditional": [ \ "if else elsif unless", \ ], \ "p6VarStorage": [ \ "let my our state temp has constant", \ ], \ "p6Repeat": [ \ "for loop repeat while until gather given", \ ], \ "p6FlowControl": [ \ "take do when next last redo return contend maybe defer", \ "default exit make continue break goto leave async lift", \ ], \ "p6TypeConstraint": [ \ "is as but trusts of returns handles where augment supersede", \ ], \ "p6ClosureTrait": [ \ "BEGIN CHECK INIT START FIRST ENTER LEAVE KEEP", \ "UNDO NEXT LAST PRE POST END CATCH CONTROL TEMP", \ ], \ "p6Exception": [ \ "die fail try warn", \ ], \ "p6Property": [ \ "prec irs ofs ors export deep binary unary reparsed rw parsed cached", \ "readonly defequiv will ref copy inline tighter looser equiv assoc", \ "required", \ ], \ "p6Number": [ \ "NaN Inf", \ ], \ "p6Pragma": [ \ "oo fatal", \ ], \ "p6Type": [ \ "Object Any Junction Whatever Capture Match", \ "Signature Proxy Matcher Package Module Class", \ "Grammar Scalar Array Hash KeyHash KeySet KeyBag", \ "Pair List Seq Range Set Bag Mapping Void Undef", \ "Failure Exception Code Block Routine Sub Macro", \ "Method Submethod Regex Str Blob Char Byte", \ "Codepoint Grapheme StrPos StrLen Version Num", \ "Complex num complex Bit bit bool True False", \ "Increasing Decreasing Ordered Callable AnyChar", \ "Positional Associative Ordering KeyExtractor", \ "Comparator OrderingPair IO KitchenSink Role", \ "Int int int1 int2 int4 int8 int16 int32 int64", \ "Rat rat rat1 rat2 rat4 rat8 rat16 rat32 rat64", \ "Buf buf buf1 buf2 buf4 buf8 buf16 buf32 buf64", \ "UInt uint uint1 uint2 uint4 uint8 uint16 uint32", \ "uint64 Abstraction utf8 utf16 utf32", \ ], \ "p6Operator": [ \ "div x xx mod also leg cmp before after eq ne le lt", \ "gt ge eqv ff fff and andthen Z X or xor", \ "orelse extra m mm rx s tr", \ ], \ } for [group, words] in items(s:keywords) let s:words_space = join(words, " ") let s:temp = split(s:words_space) let s:words = join(s:temp, "\\|") exec "syn match ". group ." ". s:before_keyword . s:words . s:after_keyword endfor unlet s:keywords s:words_space s:temp s:words " More operators " Don't put a "\+" at the end of the character class. That makes it so " greedy that the "%" " in "+%foo" won't be allowed to match as a sigil, " among other things syn match p6Operator display "[-+/*~?|=^!%&,<>.;\\]" syn match p6Operator display "\%(:\@<!::\@!\|::=\|\.::\)" " these require whitespace on the left side syn match p6Operator display "\%(\s\|^\)\@<=\%(xx=\|p5=>\)" " "i" requires a digit to the left, and no keyword char to the right syn match p6Operator display "\d\@<=i\k\@!" " index overloading syn match p6Operator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)" " all infix operators except nonassocative ones let s:infix_a = [ \ "div % mod +& +< +> \\~& ?& \\~< \\~> +| +\\^ \\~| \\~\\^ ?| ?\\^ xx x", \ "\\~ && & also <== ==> <<== ==>> == != < <= > >= \\~\\~ eq ne lt le gt", \ "ge =:= === eqv before after \\^\\^ min max \\^ff ff\\^ \\^ff\\^", \ "\\^fff fff\\^ \\^fff\\^ fff ff ::= := \\.= => , : p5=> Z minmax", \ "\\.\\.\\. and andthen or orelse xor \\^ += -= /= \\*= \\~= //= ||=", \ "+ - \\*\\* \\* // / \\~ || |", \ ] " nonassociative infix operators let s:infix_n = "but does <=> leg cmp \\.\\. \\.\\.\\^\\^ \\^\\.\\. \\^\\.\\.\\^" let s:infix_a_long = join(s:infix_a, " ") let s:infix_a_words = split(s:infix_a_long) let s:infix_a_pattern = join(s:infix_a_words, "\\|") let s:infix_n_words = split(s:infix_n) let s:infix_n_pattern = join(s:infix_n_words, "\\|") let s:both = [s:infix_a_pattern, s:infix_n_pattern] let s:infix = join(s:both, "\\|") let s:infix_assoc = "!\\?\\%(" . s:infix_a_pattern . "\\)" let s:infix = "!\\?\\%(" . s:infix . "\\)" unlet s:infix_a s:infix_a_long s:infix_a_words s:infix_a_pattern unlet s:infix_n s:infix_n_pattern s:both " [+] reduce exec "syn match p6ReduceOp display \"\\k\\@<!\\[[R\\\\]\\?!\\?". s:infix_assoc ."]\\%(«\\|<<\\)\\?\"" unlet s:infix_assoc " Reverse and cross operators (Rop, Xop) exec "syn match p6ReverseCrossOp display \"[RX]". s:infix ."\"" " q() or whatever() is always a function call syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*(\@=" " basically all builtins that can be followed by parentheses let s:routines = [ \ "eager hyper substr index rindex grep map sort join lines hints chmod", \ "split reduce min max reverse truncate zip cat roundrobin classify", \ "first sum keys values pairs defined delete exists elems end kv any", \ "all one wrap shape key value name pop push shift splice unshift floor", \ "ceiling abs exp log log10 rand sign sqrt sin cos tan round strand", \ "roots cis unpolar polar atan2 pick chop p5chop chomp p5chomp lc", \ "lcfirst uc ucfirst capitalize normalize pack unpack quotemeta comb", \ "samecase sameaccent chars nfd nfc nfkd nfkc printf sprintf caller", \ "evalfile run runinstead nothing want bless chr ord gmtime time eof", \ "localtime gethost getpw chroot getlogin getpeername kill fork wait", \ "perl graphs codes bytes clone print open read write readline say seek", \ "close opendir readdir slurp pos fmt vec link unlink symlink uniq pair", \ "asin atan sec cosec cotan asec acosec acotan sinh cosh tanh asinh", \ "acos acosh atanh sech cosech cotanh sech acosech acotanh asech ok", \ "plan_ok dies_ok lives_ok skip todo pass flunk force_todo use_ok isa_ok", \ "diag is_deeply isnt like skip_rest unlike cmp_ok eval_dies_ok nok_error", \ "eval_lives_ok approx is_approx throws_ok version_lt plan eval succ pred", \ "times nonce once signature new connect operator undef undefine sleep", \ "from to infix postfix prefix circumfix postcircumfix minmax lazy count", \ "unwrap getc pi e context void quasi body each contains rewinddir subst", \ "can isa flush arity assuming rewind callwith callsame nextwith nextsame", \ "attr eval_elsewhere none srand trim trim_start trim_end lastcall WHAT", \ "WHERE HOW WHICH VAR WHO WHENCE ACCEPTS REJECTS does not true iterator by", \ "re im invert flip", \ ] " we want to highlight builtins like split() though, so this comes afterwards " TODO: check if this would be faster as one big regex let s:words_space = join(s:routines, " ") let s:temp = split(s:words_space) let s:words = join(s:temp, "\\|") exec "syn match p6Routine ". s:before_keyword . s:words . s:after_keyword unlet s:before_keyword s:after_keyword s:words_space s:temp s:words s:routines " packages, must come after all the keywords syn match p6Normal display "\%(::\)\@<=\K\%(\k\|[-']\K\@=\)*" syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*\%(::\)\@=" " some standard packages syn match p6Type display "\%(::\|\k\|\K\@<=[-']\)\@<!\%(Order\%(::Same\|::Increase\|::Decrease\)\?\)\%(\k\|[-']\K\@=\)\@!" syn match p6Type display "\%(::\|\k\|\K\@<=[-']\)\@<!\%(Bool\%(::True\|::False\)\?\)\%(\k\|[-']\K\@=\)\@!" syn match p6Shebang display "\%^#!.*" syn match p6BlockLabel display "\%(^\s*\)\@<=\h\w*\s*::\@!\_s\@=" syn match p6Number display "\k\@<!_\@!\%(\d\|__\@!\)\+_\@<!\%([eE]_\@!+\?\%(\d\|_\)\+\)\?_\@<!" syn match p6Float display "\k\@<!_\@!\%(\d\|__\@!\)\+_\@<![eE]_\@!-\%(\d\|_\)\+" syn match p6Float display "\k\@<!_\@<!\%(\d\|__\@!\)*_\@<!\.\@<!\._\@!\.\@!\a\@!\%(\d\|_\)\+_\@<!\%([eE]_\@!\%(\d\|_\)\+\)\?" syn match p6NumberBase display "[obxd]" contained syn match p6Number display "\<0\%(o[0-7][0-7_]*\)\@=" nextgroup=p6NumberBase syn match p6Number display "\<0\%(b[01][01_]*\)\@=" nextgroup=p6NumberBase syn match p6Number display "\<0\%(x\x[[:xdigit:]_]*\)\@=" nextgroup=p6NumberBase syn match p6Number display "\<0\%(d\d[[:digit:]_]*\)\@=" nextgroup=p6NumberBase syn match p6Number display "\%(\<0o\)\@<=[0-7][0-7_]*" syn match p6Number display "\%(\<0b\)\@<=[01][01_]*" syn match p6Number display "\%(\<0x\)\@<=\x[[:xdigit:]_]*" syn match p6Number display "\%(\<0d\)\@<=\d[[:digit:]_]*" syn match p6Version display "\<v\d\@=" nextgroup=p6VersionNum syn match p6VersionNum display "\d\+" nextgroup=p6VersionDot contained syn match p6VersionDot display "\.\%(\d\|\*\)\@=" nextgroup=p6VersionNum contained " try to distinguish the "is" function from the "is" trail auxiliary syn match p6Routine display "\%(\%(\S\k\@<!\|^\)\s*\)\@<=is\>" " does is a type constraint sometimes syn match p6TypeConstraint display "does\%(\s*\%(\k\|[-']\K\@=\)\)\@=" " int is a type sometimes syn match p6Type display "\<int\>\%(\s*(\|\s\+\d\)\@!" " these Routine names are also Properties, if preceded by "is" syn match p6Property display "\%(is\s\+\)\@<=\%(signature\|context\|also\|shape\)" " The sigil in ::*Package syn match p6PackageTwigil display "\%(::\)\@<=\*" " $<match> syn region p6MatchVarSigil \ matchgroup=p6Variable \ start="\$\%(<<\@!\)\@=" \ end=">\@<=" \ contains=p6MatchVar syn region p6MatchVar \ matchgroup=p6Twigil \ start="<" \ end=">" \ contained " Contextualizers syn match p6Context display "\<\%(item\|list\|slice\|hash\)\>" syn match p6Context display "\%(\$\|@\|%\|&\|@@\)(\@=" " the "$" placeholder in "$var1, $, var2 = @list" syn match p6Placeholder display "\%(,\s*\)\@<=\$\%(\K\|\%([.^*?=!~]\|:\@<!::\@!\)\)\@!" syn match p6Placeholder display "\$\%(\K\|\%([.^*?=!~]\|:\@<!::\@!\)\)\@!\%(,\s*\)\@=" " Quoting " one cluster for every quote adverb syn cluster p6Interp_s \ add=p6InterpScalar syn cluster p6Interp_scalar \ add=p6InterpScalar syn cluster p6Interp_a \ add=p6InterpArray syn cluster p6Interp_array \ add=p6InterpArray syn cluster p6Interp_h \ add=p6InterpHash syn cluster p6Interp_hash \ add=p6InterpHash syn cluster p6Interp_f \ add=p6InterpFunction syn cluster p6Interp_f \ add=p6InterpFunction syn cluster p6Interp_c \ add=p6InterpClosure syn cluster p6Interp_closure \ add=p6InterpClosure if exists("perl6_extended_q") || exists("perl6_extended_all") syn cluster p6Interp_ww \ add=p6StringSQ \ add=p6StringDQ syn cluster p6Interp_quotewords \ add=p6StringSQ \ add=p6StringDQ endif syn cluster p6Interp_q \ add=p6EscQQ \ add=p6EscBackSlash syn cluster p6Interp_single \ add=p6EscQQ \ add=p6EscBackSlash syn cluster p6Interp_b \ add=@p6Interp_q \ add=p6Escape \ add=p6EscOpenCurly \ add=p6EscCodePoint \ add=p6EscHex \ add=p6EscOct \ add=p6EscOctOld \ add=p6EscNull syn cluster p6Interp_backslash \ add=@p6Interp_q \ add=p6Escape \ add=p6EscOpenCurly \ add=p6EscCodePoint \ add=p6EscHex \ add=p6EscOct \ add=p6EscOctOld \ add=p6EscNull syn cluster p6Interp_qq \ add=@p6Interp_scalar \ add=@p6Interp_array \ add=@p6Interp_hash \ add=@p6Interp_function \ add=@p6Interp_closure \ add=@p6Interp_backslash syn cluster p6Interp_double \ add=@p6Interp_scalar \ add=@p6Interp_array \ add=@p6Interp_hash \ add=@p6Interp_function \ add=@p6Interp_closure \ add=@p6Interp_backslash syn region p6InterpScalar \ start="\ze\z(\$\%(\%(\%(\d\+\|!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" \ start="\ze\z(\$\%(\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\|\%(\d\+\|!\|/\|¢\)\)\)" \ end="\z1\zs" \ contained \ contains=TOP \ keepend syn region p6InterpScalar \ matchgroup=p6Context \ start="\$\ze()\@!" \ skip="([^)]*)" \ end=")\zs" \ contained \ contains=TOP syn region p6InterpArray \ start="\ze\z(@\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" \ end="\z1\zs" \ contained \ contains=TOP \ keepend syn region p6InterpArray \ matchgroup=p6Context \ start="@\ze()\@!" \ start="@@\ze()\@!" \ skip="([^)]*)" \ end=")\zs" \ contained \ contains=TOP syn region p6InterpHash \ start="\ze\z(%\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" \ end="\z1\zs" \ contained \ contains=TOP \ keepend syn region p6InterpHash \ matchgroup=p6Context \ start="%\ze()\@!" \ skip="([^)]*)" \ end=")\zs" \ contained \ contains=TOP syn region p6InterpFunction \ start="\ze\z(&\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" \ end="\z1\zs" \ contained \ contains=TOP \ keepend syn region p6InterpFunction \ matchgroup=p6Context \ start="&\ze()\@!" \ skip="([^)]*)" \ end=")\zs" \ contained \ contains=TOP syn region p6InterpClosure \ start="\\\@<!{}\@!" \ skip="{[^}]*}" \ end="}" \ contained \ contains=TOP \ keepend " generic escape syn match p6Escape display "\\\S" contained " escaped closing delimiters syn match p6EscQuote display "\\'" contained syn match p6EscDoubleQuote display "\\\"" contained syn match p6EscCloseAngle display "\\>" contained syn match p6EscCloseFrench display "\\»" contained syn match p6EscBackTick display "\\`" contained syn match p6EscForwardSlash display "\\/" contained syn match p6EscVerticalBar display "\\|" contained syn match p6EscExclamation display "\\!" contained syn match p6EscComma display "\\," contained syn match p6EscDollar display "\\\$" contained syn match p6EscCloseCurly display "\\}" contained syn match p6EscCloseBracket display "\\\]" contained " misc escapes syn match p6EscOctOld display "\\\d\{1,3}" contained syn match p6EscNull display "\\0\d\@!" contained syn match p6EscCodePoint display "\%(\\c\)\@<=\%(\d\|\S\|\[\)\@=" contained nextgroup=p6CodePoint syn match p6EscHex display "\%(\\x\)\@<=\%(\x\|\[\)\@=" contained nextgroup=p6HexSequence syn match p6EscOct display "\%(\\o\)\@<=\%(\o\|\[\)\@=" contained nextgroup=p6OctSequence syn match p6EscQQ display "\\qq" contained nextgroup=p6QQSequence syn match p6EscOpenCurly display "\\{" contained syn match p6EscHash display "\\#" contained syn match p6EscBackSlash display "\\\\" contained syn region p6QQSequence \ matchgroup=p6Escape \ start="\[" \ skip="\[[^\]]*]" \ end="]" \ contained \ transparent \ contains=@p6Interp_qq syn match p6CodePoint display "\%(\d\+\|\S\)" contained syn region p6CodePoint \ matchgroup=p6Escape \ start="\[" \ end="]" \ contained syn match p6HexSequence display "\x\+" contained syn region p6HexSequence \ matchgroup=p6Escape \ start="\[" \ end="]" \ contained syn match p6OctSequence display "\o\+" contained syn region p6OctSequence \ matchgroup=p6Escape \ start="\[" \ end="]" \ contained " matches :key, :!key, :$var, :key<var>, etc " Since we don't know in advance how the adverb ends, we use a trick. " Consume nothing with the start pattern (\ze at the beginning), " while capturing the whole adverb into \z1 and then putting it before " the match start (\zs) of the end pattern. syn region p6Adverb \ start="\ze\z(:!\?\K\%(\k\|[-']\K\@=\)*\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)" \ start="\ze\z(:!\?[@$%]\$*\%(::\|\%(\$\@<=\d\+\|!\|/\|¢\)\|\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\)\|\%(\K\%(\k\|[-']\K\@=\)*\)\)\)" \ end="\z1\zs" \ contained \ contains=TOP \ keepend " <words> " FIXME: not sure how to distinguish this from the "less than" operator " in all cases. For now, it matches if any of the following is true: " " * There is whitespace missing on either side of the "<", since " people tend to put spaces around "less than" " * It comes after "enum", "for", "any", "all", or "none" " * It's the first or last thing on a line (ignoring whitespace) " * It's preceded by "= " " " It never matches when: " " * Preceded by [<+~=] (e.g. <<foo>>, =<$foo>) " * Followed by [-=] (e.g. <--, <=, <==) syn region p6StringAngle \ matchgroup=p6Quote \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!" \ start="\%(\s\|[<+~=]\)\@<!<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!" \ start="[<+~=]\@<!<\%(\s\|<\|=>\|[-=]\{1,2}>\@!\)\@!" \ start="\%(^\s*\)\@<=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!" \ start="[<+~=]\@<!<\%(\s*$\)\@=" \ start="\%(=\s\+\)\@=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!" \ skip="\\\@<!\\>" \ end=">" \ contains=p6InnerAnglesOne,p6EscBackSlash,p6EscCloseAngle syn region p6InnerAnglesOne \ matchgroup=p6StringAngle \ start="<" \ skip="\\\@<!\\>" \ end=">" \ transparent \ contained \ contains=p6InnerAnglesOne " <<words>> syn region p6StringAngles \ matchgroup=p6Quote \ start="<<=\@!" \ skip="\\\@<!\\>" \ end=">>" \ contains=p6InnerAnglesTwo,@p6Interp_qq,p6Comment,p6EscHash,p6EscCloseAngle,p6Adverb,p6StringSQ,p6StringDQ syn region p6InnerAnglesTwo \ matchgroup=p6StringAngles \ start="<<" \ skip="\\\@<!\\>" \ end=">>" \ transparent \ contained \ contains=p6InnerAnglesTwo " «words» syn region p6StringFrench \ matchgroup=p6Quote \ start="«" \ skip="\\\@<!\\»" \ end="»" \ contains=p6InnerFrench,@p6Interp_qq,p6Comment,p6EscHash,p6EscCloseFrench,p6Adverb,p6StringSQ,p6StringDQ syn region p6InnerFrench \ matchgroup=p6StringFrench \ start="«" \ skip="\\\@<!\\»" \ end="»" \ transparent \ contained \ contains=p6InnerFrench " 'string' syn region p6StringSQ \ matchgroup=p6Quote \ start="'" \ skip="\\\@<!\\'" \ end="'" \ contains=@p6Interp_q,p6EscQuote " "string" syn region p6StringDQ \ matchgroup=p6Quote \ start=+"+ \ skip=+\\\@<!\\"+ \ end=+"+ \ contains=@p6Interp_qq,p6EscDoubleQuote " Q// and friends. syn match p6QuoteQ display "\%([Qq]\%(ww\|to\|[qwxsahfcb]\)\?\)\>" nextgroup=p6QPairs skipwhite skipempty syn match p6QPairs contained transparent skipwhite skipempty nextgroup=p6StringQ,p6StringQ_PIR "\%(\_s*:!\?\K\%(\k\|[-']\K\@=\)*\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)*" if exists("perl6_embedded_pir") syn include @p6PIR syntax/pir.vim endif " hardcoded set of delimiters let s:delims = [ \ ["\\\"", "\\\"", "p6EscDoubleQuote", "\\\\\\@<!\\\\\\\""], \ ["'", "'", "p6EscQuote", "\\\\\\@<!\\\\'"], \ ["/", "/", "p6EscForwardSlash", "\\\\\\@<!\\\\/"], \ ["`", "`", "p6EscBackTick", "\\\\\\@<!\\\\`"], \ ["|", "|", "p6EscVerticalBar", "\\\\\\@<!\\\\|"], \ ["!", "!", "p6EscExclamation", "\\\\\\@<!\\\\!"], \ [",", ",", "p6EscComma", "\\\\\\@<!\\\\,"], \ ["\\$", "\\$", "p6EscDollar", "\\\\\\@<!\\\\\\$"], \ ["{", "}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}\\|{[^}]*}\\)"], \ ["<", ">", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>\\|<[^>]*>\\)"], \ ["«", "»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»\\|«[^»]*»\\)"], \ ["\\\[", "]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]\\|\\[^\\]]*]\\)"], \ ["\\s\\@<=(", ")", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\)\\|([^)]*)\\)"], \ ] " double and triple delimiters too if exists("perl6_extended_q") || exists("perl6_extended_all") call add(s:delims, ["««", "»»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»»\\|««\\%([^»]\\|»»\\@!\\)*»»\\)"]) call add(s:delims, ["«««", "»»»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»»»\\|«««\\%([^»]\\|»\\%(»»\\)\\@!\\)*»»»\\)"]) call add(s:delims, ["{{", "}}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}}\\|{{\\%([^}]\\|}}\\@!\\)*}}\\)"]) call add(s:delims, ["{{{", "}}}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}}}\\|{{{\\%([^}]\\|}\\%(}}\\)\\@!\\)*}}}\\)"]) call add(s:delims, ["\\\[\\\[", "]]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]]\\|\\[\\[\\%([^\\]]\\|]]\\@!\\)*]]\\)"]) call add(s:delims, ["\\\[\\\[\\\[", "]]]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]]]\\|\\[\\[\\[\\%([^\\]]\\|]\\%(]]\\)\\@!\\)*]]]\\)"]) call add(s:delims, ["\\s\\@<=((", "))", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\))\\|((\\%([^)]\\|))\\@!\\)*))\\)"]) call add(s:delims, ["\\s\\@<=(((", ")))", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\)))\\|(((\\%([^)]\\|)\\%())\\)\\@!\\)*)))\\)"]) call add(s:delims, ["\\s\\@<=<<", ">>", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>>\\|<<\\%([^>]\\|>>\\@!\\)*>>\\)"]) call add(s:delims, ["\\s\\@<=<<<", ">>>", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>>>\\|<<<\\%([^>]\\|>\\%(>>\\)\\@!\\)*>>>\\)"]) endif if !exists("perl6_extended_q") && !exists("perl6_extended_all") " simple version, no special highlighting within the string for [start_delim, end_delim, end_group, skip] in s:delims exec "syn region p6StringQ matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=".end_group." contained" endfor if exists("perl6_embedded_pir") " highlight embedded PIR code for [start_delim, end_delim, end_group, skip] in s:delims exec "syn region p6StringQ_PIR matchgroup=p6Quote start=\"\\%(Q\\s*:PIR\\s*\\)\\@<=".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=@p6PIR,".end_group." contained" endfor endif else let s:before = "syn region p6StringQ matchgroup=p6Quote start=\"\\%(" let s:after = "\\%(\\_s*:!\\?\\K\\%(\\k\\|[-']\\K\\@=\\)*\\%(([^)]*)\\|\\[[^\\]]*]\\|<[^>]*>\\|«[^»]*»\\|{[^}]*}\\)\\?\\)*\\_s*\\)\\@<=" let s:adverbs = [ \ ["s", "scalar"], \ ["a", "array"], \ ["h", "hash"], \ ["f", "function"], \ ["c", "closure"], \ ["b", "backslash"], \ ["w", "words"], \ ["ww", "quotewords"], \ ["x", "exec"], \ ] " these can't be conjoined with q and qq (e.g. as qqq and qqqq) let s:q_adverbs = [ \ ["q", "single"], \ ["qq", "double"], \ ] for [start_delim, end_delim, end_group, skip] in s:delims " Q, q, and qq with any number of (ignored) adverbs exec s:before ."Q". s:after .start_delim."\" end=\"". end_delim ."\""." contained" exec s:before ."q". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q"." contained" exec s:before ."qq". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq"." contained" for [short, long] in s:adverbs " Qs, qs, qqs, Qa, qa, qqa, etc, with ignored adverbs exec s:before ."Q".short. s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long." contained" exec s:before ."q".short. s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long." contained" exec s:before ."qq".short. s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long." contained" " Q, q, and qq, with one significant adverb exec s:before ."Q\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long." contained" for [q_short, q_long] in s:q_adverbs exec s:before ."Q\\s*:\\%(".q_short."\\|".q_long."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".q_long." contained" endfor exec s:before ."q\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long." contained" exec s:before ."qq\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long." contained" for [short2, long2] in s:adverbs " Qs, qs, qqs, Qa, qa, qqa, etc, with one significant adverb exec s:before ."Q".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long.",@p6Interp_".long2." contained" for [q_short2, q_long2] in s:q_adverbs exec s:before ."Q".short."\\s*:\\%(".q_short2."\\|".q_long2."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long.",@p6Interp_".q_long2." contained" endfor exec s:before ."q".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long.",@p6Interp_".long2." contained" exec s:before ."qq".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long.",@p6Interp_".long2." contained" endfor endfor endfor unlet s:before s:after s:adverbs s:q_adverbs endif unlet s:delims " Match these so something else above can't. E.g. the "q" in "role q { }" " should not be considered a string syn match p6Normal display "\%(\<\%(role\|grammar\|slang\)\s\+\)\@<=\K\%(\k\|[-']\K\@=\)*" " :key syn match p6Operator display ":\@<!::\@!!\?" nextgroup=p6Key syn match p6Key display "\k\%(\k\|[-']\K\@=\)*" contained " => and p5=> autoquoting syn match p6StringP5Auto display "\K\%(\k\|[-']\K\@=\)*\ze\s\+p5=>" syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*\ze\%(p5\)\@<!=>" syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*\ze\s\+=>" syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*p5\ze=>" " Hyperoperators. Needs to come after the quoting operators (<>, «», etc) exec "syn match p6HyperOp display \"»" .s:infix."»\\?\"" exec "syn match p6HyperOp display \"«\\?".s:infix."«\"" exec "syn match p6HyperOp display \"»" .s:infix."«\"" exec "syn match p6HyperOp display \"«" .s:infix. "»\"" exec "syn match p6HyperOp display \">>" .s:infix."\\%(>>\\)\\?\"" exec "syn match p6HyperOp display \"\\%(<<\\)\\?".s:infix."<<\"" exec "syn match p6HyperOp display \">>" .s:infix."<<\"" exec "syn match p6HyperOp display \"<<" .s:infix.">>\"" unlet s:infix " Regexes and grammars syn match p6RegexName display "\%(\<\%(regex\|rule\|token\)\s\+\)\@<=\K\%(\k\|[-']\K\@=\)*" nextgroup=p6RegexBlockCrap skipwhite skipempty syn match p6RegexBlockCrap "[^{]*" nextgroup=p6RegexBlock skipwhite skipempty transparent contained syn region p6RegexBlock \ matchgroup=p6Normal \ start="{" \ end="}" \ contained \ contains=@p6Regexen,@p6Variables " Perl 6 regex bits syn cluster p6Regexen \ add=p6RxMeta \ add=p6RxEscape \ add=p6EscHex \ add=p6EscOct \ add=p6EscNull \ add=p6RxAnchor \ add=p6RxCapture \ add=p6RxGroup \ add=p6RxAlternation \ add=p6RxAdverb \ add=p6RxAdverbArg \ add=p6RxStorage \ add=p6RxAssertion \ add=p6RxQuoteWords \ add=p6RxClosure \ add=p6RxStringSQ \ add=p6RxStringDQ \ add=p6Comment syn match p6RxMeta display contained ".\%(\k\|\s\)\@<!" syn match p6RxAnchor display contained "[$^]" syn match p6RxEscape display contained "\\\S" syn match p6RxCapture display contained "[()]" syn match p6RxAlternation display contained "|" syn match p6RxRange display contained "\.\." syn region p6RxClosure \ matchgroup=p6Normal \ start="{" \ end="}" \ contained \ containedin=p6RxClosure \ contains=TOP syn region p6RxGroup \ matchgroup=p6StringSpecial2 \ start="\[" \ end="]" \ contained \ contains=@p6Regexen,@p6Variables syn region p6RxAssertion \ matchgroup=p6StringSpecial2 \ start="<" \ end=">" \ contained \ contains=@p6Regexen,@p6Variables,p6RxCharClass,p6RxAssertCall syn region p6RxAssertCall \ matchgroup=p6Normal \ start="\%(::\|\%(\K\%(\k\|[-']\K\@=\)*\)\)\@<=(\@=" \ end=")\@<=" \ contained \ contains=TOP syn region p6RxCharClass \ matchgroup=p6StringSpecial2 \ start="\%(<[-!+?]\?\)\@<=\[" \ skip="\\]" \ end="]" \ contained \ contains=p6RxRange,p6RxEscape,p6EscHex,p6EscOct,p6EscNull syn region p6RxQuoteWords \ matchgroup=p6StringSpecial2 \ start="< " \ end=">" \ contained syn region p6RxAdverb \ start="\ze\z(:!\?\K\%(\k\|[-']\K\@=\)*\)" \ end="\z1\zs" \ contained \ contains=TOP \ keepend syn region p6RxAdverbArg \ start="\%(:!\?\K\%(\k\|[-']\K\@=\)*\)\@<=(" \ skip="([^)]*)" \ end=")" \ contained \ contains=TOP syn region p6RxStorage \ matchgroup=p6Operator \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@=" \ end="$" \ contains=TOP \ contained " Perl 5 regex bits syn cluster p6RegexP5Base \ add=p6RxP5Escape \ add=p6RxP5Oct \ add=p6RxP5Hex \ add=p6RxP5EscMeta \ add=p6RxP5CodePoint \ add=p6RxP5Prop " normal regex stuff syn cluster p6RegexP5 \ add=@p6RegexP5Base \ add=p6RxP5Quantifier \ add=p6RxP5Meta \ add=p6RxP5QuoteMeta \ add=p6RxP5ParenMod \ add=p6RxP5Verb \ add=p6RxP5Count \ add=p6RxP5Named \ add=p6RxP5ReadRef \ add=p6RxP5WriteRef \ add=p6RxP5CharClass \ add=p6RxP5Anchor " inside character classes syn cluster p6RegexP5Class \ add=@p6RegexP5Base \ add=p6RxP5Posix \ add=p6RxP5Range syn match p6RxP5Escape display contained "\\\S" syn match p6RxP5CodePoint display contained "\\c\S\@=" nextgroup=p6RxP5CPId syn match p6RxP5CPId display contained "\S" syn match p6RxP5Oct display contained "\\\%(\o\{1,3}\)\@=" nextgroup=p6RxP5OctSeq syn match p6RxP5OctSeq display contained "\o\{1,3}" syn match p6RxP5Anchor display contained "[\^$]" syn match p6RxP5Hex display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=p6RxP5HexSeq syn match p6RxP5HexSeq display contained "\x\{1,2}" syn region p6RxP5HexSeq \ matchgroup=p6RxP5Escape \ start="{" \ end="}" \ contained syn region p6RxP5Named \ matchgroup=p6RxP5Escape \ start="\%(\\N\)\@<={" \ end="}" \ contained syn match p6RxP5Quantifier display contained "\%([+*]\|(\@<!?\)" syn match p6RxP5ReadRef display contained "\\[1-9]\d\@!" syn match p6RxP5ReadRef display contained "\\k<\@=" nextgroup=p6RxP5ReadRefId syn region p6RxP5ReadRefId \ matchgroup=p6RxP5Escape \ start="<" \ end=">" \ contained syn match p6RxP5WriteRef display contained "\\g\%(\d\|{\)\@=" nextgroup=p6RxP5WriteRefId syn match p6RxP5WriteRefId display contained "\d\+" syn region p6RxP5WriteRefId \ matchgroup=p6RxP5Escape \ start="{" \ end="}" \ contained syn match p6RxP5Prop display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=p6RxP5PropId syn match p6RxP5PropId display contained "\a" syn region p6RxP5PropId \ matchgroup=p6RxP5Escape \ start="{" \ end="}" \ contained syn match p6RxP5Meta display contained "[(|).]" syn match p6RxP5ParenMod display contained "(\@<=?\@=" nextgroup=p6RxP5Mod,p6RxP5ModName,p6RxP5Code syn match p6RxP5Mod display contained "?\%(<\?=\|<\?!\|[#:|]\)" syn match p6RxP5Mod display contained "?-\?[impsx]\+" syn match p6RxP5Mod display contained "?\%([-+]\?\d\+\|R\)" syn match p6RxP5Mod display contained "?(DEFINE)" syn match p6RxP5Mod display contained "?\%(&\|P[>=]\)" nextgroup=p6RxP5ModDef syn match p6RxP5ModDef display contained "\h\w*" syn region p6RxP5ModName \ matchgroup=p6StringSpecial \ start="?'" \ end="'" \ contained syn region p6RxP5ModName \ matchgroup=p6StringSpecial \ start="?P\?<" \ end=">" \ contained syn region p6RxP5Code \ matchgroup=p6StringSpecial \ start="??\?{" \ end="})\@=" \ contained \ contains=TOP syn match p6RxP5EscMeta display contained "\\[?*.{}()[\]|\^$]" syn match p6RxP5Count display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=p6RxP5CountId syn region p6RxP5CountId \ matchgroup=p6RxP5Escape \ start="{" \ end="}" \ contained syn match p6RxP5Verb display contained "(\@<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)" syn region p6RxP5QuoteMeta \ matchgroup=p6RxP5Escape \ start="\\Q" \ end="\\E" \ contained \ contains=@p6Variables,p6EscBackSlash syn region p6RxP5CharClass \ matchgroup=p6StringSpecial \ start="\[\^\?" \ skip="\\]" \ end="]" \ contained \ contains=@p6RegexP5Class syn region p6RxP5Posix \ matchgroup=p6RxP5Escape \ start="\[:" \ end=":]" \ contained syn match p6RxP5Range display contained "-" " 'string' inside a regex syn region p6RxStringSQ \ matchgroup=p6Quote \ start="'" \ skip="\\\@<!\\'" \ end="'" \ contained \ contains=p6EscQuote,p6EscBackSlash " "string" inside a regex syn region p6RxStringDQ \ matchgroup=p6Quote \ start=+"+ \ skip=+\\\@<!\\"+ \ end=+"+ \ contained \ contains=p6EscDoubleQuote,p6EscBackSlash " $!, $var, $!var, $::var, $package::var $*::package::var, etc " Thus must come after the matches for the "$" regex anchor, but before " the match for the $ regex delimiter syn cluster p6Variables \ add=p6VarSlash \ add=p6VarExclam \ add=p6VarMatch \ add=p6VarNum \ add=p6Variable syn match p6VarSlash display "\$/" syn match p6VarExclam display "\$!" syn match p6VarMatch display "\$¢" syn match p6VarNum display "\$\d\+" syn match p6Variable display "\%(@@\|[@&$%]\$*\)\%(::\|\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\)\|\K\)\@=" nextgroup=p6Twigil,p6VarName,p6PackageScope syn match p6VarName display "\K\%(\k\|[-']\K\@=\)*" contained syn match p6Twigil display "\%([.^*?=!~]\|:\@<!::\@!\)\K\@=" nextgroup=p6PackageScope,p6VarName contained syn match p6PackageScope display "\%(\K\%(\k\|[-']\K\@=\)*\)\?::" nextgroup=p6PackageScope,p6VarName contained " Perl 6 regex regions " /foo/ " 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. " TODO: mostly stolen from perl.vim, might need more work syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!" \ start="^//\@!" \ start=+\s\@<=/[^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!/\@!+ \ skip="\\/" \ end="/" \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum " m/foo/, mm/foo/, rx/foo/ syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!" \ skip="\\/" \ end="/" \ keepend \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum " m!foo!, mm!foo!, rx!foo! syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!" \ skip="\\!" \ end="!" \ keepend \ contains=@p6Regexen,p6Variable,p6VarSlash,p6VarMatch,p6VarNum " m$foo$, mm$foo$, rx$foo$, m|foo|, mm|foo|, rx|foo|, etc syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!" \ skip="\\\z1" \ end="\z1" \ keepend \ contains=@p6Regexen,@p6Variables " m (foo), mm (foo), rx (foo) syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!" \ skip="\\)" \ end=")" \ contains=@p6Regexen,@p6Variables " m[foo], mm[foo], rx[foo] syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!" \ skip="\\]" \ end="]" \ contains=@p6Regexen,@p6Variables " m{foo}, mm{foo}, rx{foo} syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!" \ skip="\\}" \ end="}" \ contains=@p6Regexen,@p6Variables " m<foo>, mm<foo>, rx<foo> syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!" \ skip="\\>" \ end=">" \ contains=@p6Regexen,@p6Variables " m«foo», mm«foo», rx«foo» syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!»\@!" \ skip="\\»" \ end="»" \ contains=@p6Regexen,@p6Variables " Substitutions " s/foo/bar/ syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/" \ skip="\\/" \ end="/"me=e-1 \ keepend \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum \ nextgroup=p6Substitution syn region p6Substitution \ matchgroup=p6Quote \ start="/" \ skip="\\/" \ end="/" \ contained \ keepend \ contains=@p6Interp_qq " s!foo!bar! syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!" \ skip="\\!" \ end="!"me=e-1 \ keepend \ contains=@p6Regexen,p6Variable,p6VarSlash,p6VarMatch,p6VarNum \ nextgroup=p6Substitution syn region p6Substitution \ matchgroup=p6Quote \ start="!" \ skip="\\!" \ end="!" \ contained \ keepend \ contains=@p6Interp_qq " s$foo$bar$, s|foo|bar, etc syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)" \ skip="\\\z1" \ end="\z1"me=e-1 \ keepend \ contains=@p6Regexen,@p6Variables \ nextgroup=p6Substitution syn region p6Substitution \ matchgroup=p6Quote \ start="\z([\"'`|,$]\)" \ skip="\\\z1" \ end="\z1" \ contained \ keepend \ contains=@p6Interp_qq " s{foo} syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!" \ skip="\\}" \ end="}" \ contains=@p6Regexen,@p6Variables " s[foo] syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!" \ skip="\\]" \ end="]" \ contains=@p6Regexen,@p6Variables " s<foo> syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!" \ skip="\\>" \ end=">" \ contains=@p6Regexen,@p6Variables " s«foo» syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!" \ skip="\\»" \ end="»" \ contains=@p6Regexen,@p6Variables " s (foo) syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!" \ skip="\\)" \ end=")" \ contains=@p6Regexen,@p6Variables " Perl 5 regex regions " m:P5// syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/" \ skip="\\/" \ end="/" \ contains=@p6RegexP5,p6Variable,p6VarExclam,p6VarMatch,p6VarNum " m:P5!! syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!" \ skip="\\!" \ end="!" \ contains=@p6RegexP5,p6Variable,p6VarSlash,p6VarMatch,p6VarNum " m:P5$$, m:P5||, etc syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)" \ skip="\\\z1" \ end="\z1" \ contains=@p6RegexP5,@p6Variables " m:P5 () syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!" \ skip="\\)" \ end=")" \ contains=@p6RegexP5,@p6Variables " m:P5[] syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!" \ skip="\\]" \ end="]" \ contains=@p6RegexP5,@p6Variables " m:P5{} syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!" \ skip="\\}" \ end="}" \ contains=@p6RegexP5,p6Variables " m:P5<> syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!" \ skip="\\>" \ end=">" \ contains=@p6RegexP5,p6Variables " m:P5«» syn region p6Match \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!" \ skip="\\»" \ end="»" \ contains=@p6RegexP5,p6Variables " Transliteration " tr/foo/bar/, tr|foo|bar, etc syn region p6String \ matchgroup=p6Quote \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)" \ skip="\\\z1" \ end="\z1"me=e-1 \ contains=p6RxRange \ nextgroup=p6Transliteration syn region p6Transliteration \ matchgroup=p6Quote \ start="\z([/\"'`|!,$]\)" \ skip="\\\z1" \ end="\z1" \ contained \ contains=@p6Interp_qq " Comments " normal end-of-line comment syn match p6Comment display "#.*" contains=p6Attention " Multiline comments. Arbitrary numbers of opening brackets are allowed, " but we only define regions for 1 to 3 syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#(" \ skip="([^)]*)" \ end=")" \ matchgroup=p6Error \ start="^#(" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#\[" \ skip="\[[^\]]*]" \ end="]" \ matchgroup=p6Error \ start="^#\[" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#{" \ skip="{[^}]*}" \ end="}" \ matchgroup=p6Error \ start="^#{" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#<" \ skip="<[^>]*>" \ end=">" \ matchgroup=p6Error \ start="^#<" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#«" \ skip="«[^»]*»" \ end="»" \ matchgroup=p6Error \ start="^#«" \ contains=p6Attention,p6Comment " double and triple delimiters if exists("perl6_extended_comments") || exists("perl6_extended_all") syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#((" \ skip="((\%([^)\|))\@!]\)*))" \ end="))" \ matchgroup=p6Error \ start="^#((" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#(((" \ skip="(((\%([^)]\|)\%())\)\@!\)*)))" \ end=")))" \ matchgroup=p6Error \ start="^#(((" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#\[\[" \ skip="\[\[\%([^\]]\|]]\@!\)*]]" \ end="]]" \ matchgroup=p6Error \ start="^#\[\[" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#\[\[\[" \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]" \ end="]]]" \ matchgroup=p6Error \ start="^#\[\[\[" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#{{" \ skip="{{\%([^}]\|}}\@!\)*}}" \ end="}}" \ matchgroup=p6Error \ start="^#{{" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#{{{" \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}" \ end="}}}" \ matchgroup=p6Error \ start="^#{{{" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#<<" \ skip="<<\%([^>]\|>>\@!\)*>>" \ end=">>" \ matchgroup=p6Error \ start="^#<<" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#<<<" \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>" \ end=">>>" \ matchgroup=p6Error \ start="^#<<<" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#««" \ skip="««\%([^»]\|»»\@!\)*»»" \ end="»»" \ matchgroup=p6Error \ start="^#««" \ contains=p6Attention,p6Comment syn region p6Comment \ matchgroup=p6Comment \ start="^\@<!#«««" \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»" \ end="»»»" \ matchgroup=p6Error \ start="^#«««" \ contains=p6Attention,p6Comment endif " Pod " Abbreviated blocks (implicit code forbidden) syn region p6PodAbbrRegion \ matchgroup=p6PodPrefix \ start="^=\ze\K\k*" \ end="^\ze\%(\s*$\|=\K\)" \ contains=p6PodAbbrNoCodeType \ keepend syn region p6PodAbbrNoCodeType \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=p6PodName,p6PodAbbrNoCode syn match p6PodName contained ".\+" contains=@p6PodFormat syn match p6PodComment contained ".\+" syn region p6PodAbbrNoCode \ start="^" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=@p6PodFormat " Abbreviated blocks (everything is code) syn region p6PodAbbrRegion \ matchgroup=p6PodPrefix \ start="^=\zecode\>" \ end="^\ze\%(\s*$\|=\K\)" \ contains=p6PodAbbrCodeType \ keepend syn region p6PodAbbrCodeType \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=p6PodName,p6PodAbbrCode syn region p6PodAbbrCode \ start="^" \ end="^\ze\%(\s*$\|=\K\)" \ contained " Abbreviated blocks (everything is a comment) syn region p6PodAbbrRegion \ matchgroup=p6PodPrefix \ start="^=\zecomment\>" \ end="^\ze\%(\s*$\|=\K\)" \ contains=p6PodAbbrCommentType \ keepend syn region p6PodAbbrCommentType \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=p6PodComment,p6PodAbbrNoCode " Abbreviated blocks (implicit code allowed) syn region p6PodAbbrRegion \ matchgroup=p6PodPrefix \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>" \ end="^\ze\%(\s*$\|=\K\)" \ contains=p6PodAbbrType \ keepend syn region p6PodAbbrType \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=p6PodName,p6PodAbbr syn region p6PodAbbr \ start="^" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=@p6PodFormat,p6PodImplicitCode " Abbreviated block to end-of-file syn region p6PodAbbrRegion \ matchgroup=p6PodPrefix \ start="^=\zeEND\>" \ end="\%$" \ contains=p6PodAbbrEOFType \ keepend syn region p6PodAbbrEOFType \ matchgroup=p6PodType \ start="\K\k*" \ end="\%$" \ contained \ contains=p6PodName,p6PodAbbrEOF syn region p6PodAbbrEOF \ start="^" \ end="\%$" \ contained \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode " Directives syn region p6PodDirectRegion \ matchgroup=p6PodPrefix \ start="^=\%(config\|use\)\>" \ end="^\ze\%([^=]\|=\K\|\s*$\)" \ contains=p6PodDirectArgRegion \ keepend syn region p6PodDirectArgRegion \ matchgroup=p6PodType \ start="\S\+" \ end="^\ze\%([^=]\|=\K\|\s*$\)" \ contained \ contains=p6PodDirectConfigRegion syn region p6PodDirectConfigRegion \ start="" \ end="^\ze\%([^=]\|=\K\|\s*$\)" \ contained \ contains=@p6PodConfig " =encoding is a special directive syn region p6PodDirectRegion \ matchgroup=p6PodPrefix \ start="^=encoding\>" \ end="^\ze\%([^=]\|=\K\|\s*$\)" \ contains=p6PodEncodingArgRegion \ keepend syn region p6PodEncodingArgRegion \ matchgroup=p6PodName \ start="\S\+" \ end="^\ze\%([^=]\|=\K\|\s*$\)" \ contained " Paragraph blocks (implicit code forbidden) syn region p6PodParaRegion \ matchgroup=p6PodPrefix \ start="^=for\>" \ end="^\ze\%(\s*$\|=\K\)" \ contains=p6PodParaNoCodeTypeRegion \ keepend \ extend syn region p6PodParaNoCodeTypeRegion \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=p6PodParaNoCode,p6PodParaConfigRegion syn region p6PodParaConfigRegion \ start="" \ end="^\ze\%([^=]\|=\k\@<!\)" \ contained \ contains=@p6PodConfig syn region p6PodParaNoCode \ start="^[^=]" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=@p6PodFormat " Paragraph blocks (everything is code) syn region p6PodParaRegion \ matchgroup=p6PodPrefix \ start="^=for\>\ze\s*code\>" \ end="^\ze\%(\s*$\|=\K\)" \ contains=p6PodParaCodeTypeRegion \ keepend \ extend syn region p6PodParaCodeTypeRegion \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=p6PodParaCode,p6PodParaConfigRegion syn region p6PodParaCode \ start="^[^=]" \ end="^\ze\%(\s*$\|=\K\)" \ contained " Paragraph blocks (implicit code allowed) syn region p6PodParaRegion \ matchgroup=p6PodPrefix \ start="^=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" \ end="^\ze\%(\s*$\|=\K\)" \ contains=p6PodParaTypeRegion \ keepend \ extend syn region p6PodParaTypeRegion \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=p6PodPara,p6PodParaConfigRegion syn region p6PodPara \ start="^[^=]" \ end="^\ze\%(\s*$\|=\K\)" \ contained \ contains=@p6PodFormat,p6PodImplicitCode " Paragraph block to end-of-file syn region p6PodParaRegion \ matchgroup=p6PodPrefix \ start="^=for\>\ze\s\+END\>" \ end="\%$" \ contains=p6PodParaEOFTypeRegion \ keepend \ extend syn region p6PodParaEOFTypeRegion \ matchgroup=p6PodType \ start="\K\k*" \ end="\%$" \ contained \ contains=p6PodParaEOF,p6PodParaConfigRegion syn region p6PodParaEOF \ start="^[^=]" \ end="\%$" \ contained \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode " Delimited blocks (implicit code forbidden) syn region p6PodDelimRegion \ matchgroup=p6PodPrefix \ start="^=begin\>" \ end="^=end\>" \ contains=p6PodDelimNoCodeTypeRegion \ keepend \ extend syn region p6PodDelimNoCodeTypeRegion \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze=end\>" \ contained \ contains=p6PodDelimNoCode,p6PodDelimConfigRegion syn region p6PodDelimConfigRegion \ start="" \ end="^\ze\%([^=]\|=\K\|\s*$\)" \ contained \ contains=@p6PodConfig syn region p6PodDelimNoCode \ start="^" \ end="^\ze=end\>" \ contained \ contains=@p6PodNestedBlocks,@p6PodFormat " Delimited blocks (everything is code) syn region p6PodDelimRegion \ matchgroup=p6PodPrefix \ start="^=begin\>\ze\s*code\>" \ end="^=end\>" \ contains=p6PodDelimCodeTypeRegion \ keepend \ extend syn region p6PodDelimCodeTypeRegion \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze=end\>" \ contained \ contains=p6PodDelimCode,p6PodDelimConfigRegion syn region p6PodDelimCode \ start="^" \ end="^\ze=end\>" \ contained \ contains=@p6PodNestedBlocks " Delimited blocks (implicit code allowed) syn region p6PodDelimRegion \ matchgroup=p6PodPrefix \ start="^=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" \ end="^=end\>" \ contains=p6PodDelimTypeRegion \ keepend \ extend syn region p6PodDelimTypeRegion \ matchgroup=p6PodType \ start="\K\k*" \ end="^\ze=end\>" \ contained \ contains=p6PodDelim,p6PodDelimConfigRegion syn region p6PodDelim \ start="^" \ end="^\ze=end\>" \ contained \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode " Delimited block to end-of-file syn region p6PodDelimRegion \ matchgroup=p6PodPrefix \ start="^=begin\>\ze\s\+END\>" \ end="\%$" \ contains=p6PodDelimEOFTypeRegion \ extend syn region p6PodDelimEOFTypeRegion \ matchgroup=p6PodType \ start="\K\k*" \ end="\%$" \ contained \ contains=p6PodDelimEOF,p6PodDelimConfigRegion syn region p6PodDelimEOF \ start="^" \ end="\%$" \ contained \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode syn cluster p6PodConfig \ add=p6PodConfigOperator \ add=p6PodExtraConfig \ add=p6StringAuto \ add=p6PodAutoQuote \ add=p6StringSQ syn region p6PodParens \ start="(" \ end=")" \ contained \ contains=p6Number,p6StringSQ syn match p6PodAutoQuote display contained "=>" syn match p6PodConfigOperator display contained ":!\?" nextgroup=p6PodConfigOption syn match p6PodConfigOption display contained "[^[:space:](<]\+" nextgroup=p6PodParens,p6StringAngle syn match p6PodExtraConfig display contained "^=" syn match p6PodVerticalBar display contained "|" syn match p6PodColon display contained ":" syn match p6PodSemicolon display contained ";" syn match p6PodComma display contained "," syn match p6PodImplicitCode display contained "^\s.*" syn region p6PodDelimEndRegion \ matchgroup=p6PodType \ start="\%(^=end\>\)\@<=" \ end="\K\k*" " These may appear inside delimited blocks syn cluster p6PodNestedBlocks \ add=p6PodAbbrRegion \ add=p6PodDirectRegion \ add=p6PodParaRegion \ add=p6PodDelimRegion \ add=p6PodDelimEndRegion " Pod formatting codes syn cluster p6PodFormat \ add=p6PodFormatOne \ add=p6PodFormatTwo \ add=p6PodFormatThree \ add=p6PodFormatFrench " Balanced angles found inside formatting codes. Ensures proper nesting. syn region p6PodFormatAnglesOne \ matchgroup=p6PodFormat \ start="<" \ skip="<[^>]*>" \ end=">" \ transparent \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne syn region p6PodFormatAnglesTwo \ matchgroup=p6PodFormat \ start="<<" \ skip="<<[^>]*>>" \ end=">>" \ transparent \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo syn region p6PodFormatAnglesThree \ matchgroup=p6PodFormat \ start="<<<" \ skip="<<<[^>]*>>>" \ end=">>>" \ transparent \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo,p6PodFormatAnglesThree syn region p6PodFormatAnglesFrench \ matchgroup=p6PodFormat \ start="«" \ skip="«[^»]*»" \ end="»" \ transparent \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo,p6PodFormatAnglesThree " All formatting codes syn region p6PodFormatOne \ matchgroup=p6PodFormatCode \ start="\u<" \ skip="<[^>]*>" \ end=">" \ contained \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne syn region p6PodFormatTwo \ matchgroup=p6PodFormatCode \ start="\u<<" \ skip="<<[^>]*>>" \ end=">>" \ contained \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo syn region p6PodFormatThree \ matchgroup=p6PodFormatCode \ start="\u<<<" \ skip="<<<[^>]*>>>" \ end=">>>" \ contained \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree syn region p6PodFormatFrench \ matchgroup=p6PodFormatCode \ start="\u«" \ skip="«[^»]*»" \ end="»" \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree " C<> and V<> don't allow nested formatting formatting codes syn region p6PodFormatOne \ matchgroup=p6PodFormatCode \ start="[CV]<" \ skip="<[^>]*>" \ end=">" \ contained \ contains=p6PodFormatAnglesOne syn region p6PodFormatTwo \ matchgroup=p6PodFormatCode \ start="[CV]<<" \ skip="<<[^>]*>>" \ end=">>" \ contained \ contains=p6PodFormatAnglesTwo syn region p6PodFormatThree \ matchgroup=p6PodFormatCode \ start="[CV]<<<" \ skip="<<<[^>]*>>>" \ end=">>>" \ contained \ contains=p6PodFormatAnglesThree syn region p6PodFormatFrench \ matchgroup=p6PodFormatCode \ start="[CV]«" \ skip="«[^»]*»" \ end="»" \ contained \ contains=p6PodFormatAnglesFrench " L<> can have a "|" separator syn region p6PodFormatOne \ matchgroup=p6PodFormatCode \ start="L<" \ skip="<[^>]*>" \ end=">" \ contained \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar syn region p6PodFormatTwo \ matchgroup=p6PodFormatCode \ start="L<<" \ skip="<<[^>]*>>" \ end=">>" \ contained \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar syn region p6PodFormatThree \ matchgroup=p6PodFormatCode \ start="L<<<" \ skip="<<<[^>]*>>>" \ end=">>>" \ contained \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar syn region p6PodFormatFrench \ matchgroup=p6PodFormatCode \ start="L«" \ skip="«[^»]*»" \ end="»" \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar " E<> can have a ";" separator syn region p6PodFormatOne \ matchgroup=p6PodFormatCode \ start="E<" \ skip="<[^>]*>" \ end=">" \ contained \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodSemiColon syn region p6PodFormatTwo \ matchgroup=p6PodFormatCode \ start="E<<" \ skip="<<[^>]*>>" \ end=">>" \ contained \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodSemiColon syn region p6PodFormatThree \ matchgroup=p6PodFormatCode \ start="E<<<" \ skip="<<<[^>]*>>>" \ end=">>>" \ contained \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodSemiColon syn region p6PodFormatFrench \ matchgroup=p6PodFormatCode \ start="E«" \ skip="«[^»]*»" \ end="»" \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodSemiColon " M<> can have a ":" separator syn region p6PodFormatOne \ matchgroup=p6PodFormatCode \ start="M<" \ skip="<[^>]*>" \ end=">" \ contained \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodColon syn region p6PodFormatTwo \ matchgroup=p6PodFormatCode \ start="M<<" \ skip="<<[^>]*>>" \ end=">>" \ contained \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodColon syn region p6PodFormatThree \ matchgroup=p6PodFormatCode \ start="M<<<" \ skip="<<<[^>]*>>>" \ end=">>>" \ contained \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodColon syn region p6PodFormatFrench \ matchgroup=p6PodFormatCode \ start="M«" \ skip="«[^»]*»" \ end="»" \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodColon " D<> can have "|" and ";" separators syn region p6PodFormatOne \ matchgroup=p6PodFormatCode \ start="D<" \ skip="<[^>]*>" \ end=">" \ contained \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar,p6PodSemiColon syn region p6PodFormatTwo \ matchgroup=p6PodFormatCode \ start="D<<" \ skip="<<[^>]*>>" \ end=">>" \ contained \ contains=p6PodFormatAngleTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar,p6PodSemiColon syn region p6PodFormatThree \ matchgroup=p6PodFormatCode \ start="D<<<" \ skip="<<<[^>]*>>>" \ end=">>>" \ contained \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon syn region p6PodFormatFrench \ matchgroup=p6PodFormatCode \ start="D«" \ skip="«[^»]*»" \ end="»" \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon " X<> can have "|", "," and ";" separators syn region p6PodFormatOne \ matchgroup=p6PodFormatCode \ start="X<" \ skip="<[^>]*>" \ end=">" \ contained \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar,p6PodSemiColon,p6PodComma syn region p6PodFormatTwo \ matchgroup=p6PodFormatCode \ start="X<<" \ skip="<<[^>]*>>" \ end=">>" \ contained \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar,p6PodSemiColon,p6PodComma syn region p6PodFormatThree \ matchgroup=p6PodFormatCode \ start="X<<<" \ skip="<<<[^>]*>>>" \ end=">>>" \ contained \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon,p6PodComma syn region p6PodFormatFrench \ matchgroup=p6PodFormatCode \ start="X«" \ skip="«[^»]*»" \ end="»" \ contained \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon,p6PodComma " Define the default highlighting. " Only when an item doesn't have highlighting yet hi def link p6EscOctOld p6Error hi def link p6PackageTwigil p6Twigil hi def link p6StringAngle p6String hi def link p6StringFrench p6String hi def link p6StringAngles p6String hi def link p6StringSQ p6String hi def link p6StringDQ p6String hi def link p6StringQ p6String hi def link p6RxStringSQ p6String hi def link p6RxStringDQ p6String hi def link p6Substitution p6String hi def link p6Transliteration p6String hi def link p6StringAuto p6String hi def link p6StringP5Auto p6String hi def link p6Key p6String hi def link p6Match p6String hi def link p6RegexBlock p6String hi def link p6RxP5CharClass p6String hi def link p6RxP5QuoteMeta p6String hi def link p6RxCharClass p6String hi def link p6RxQuoteWords p6String hi def link p6ReduceOp p6Operator hi def link p6ReverseCrossOp p6Operator hi def link p6HyperOp p6Operator hi def link p6QuoteQ p6Operator hi def link p6RxRange p6StringSpecial hi def link p6RxAnchor p6StringSpecial hi def link p6RxP5Anchor p6StringSpecial hi def link p6CodePoint p6StringSpecial hi def link p6RxMeta p6StringSpecial hi def link p6RxP5Range p6StringSpecial hi def link p6RxP5CPId p6StringSpecial hi def link p6RxP5Posix p6StringSpecial hi def link p6RxP5Mod p6StringSpecial hi def link p6RxP5HexSeq p6StringSpecial hi def link p6RxP5OctSeq p6StringSpecial hi def link p6RxP5WriteRefId p6StringSpecial hi def link p6HexSequence p6StringSpecial hi def link p6OctSequence p6StringSpecial hi def link p6RxP5Named p6StringSpecial hi def link p6RxP5PropId p6StringSpecial hi def link p6RxP5Quantifier p6StringSpecial hi def link p6RxP5CountId p6StringSpecial hi def link p6RxP5Verb p6StringSpecial hi def link p6Escape p6StringSpecial2 hi def link p6EscNull p6StringSpecial2 hi def link p6EscHash p6StringSpecial2 hi def link p6EscQQ p6StringSpecial2 hi def link p6EscQuote p6StringSpecial2 hi def link p6EscDoubleQuote p6StringSpecial2 hi def link p6EscBackTick p6StringSpecial2 hi def link p6EscForwardSlash p6StringSpecial2 hi def link p6EscVerticalBar p6StringSpecial2 hi def link p6EscExclamation p6StringSpecial2 hi def link p6EscDollar p6StringSpecial2 hi def link p6EscOpenCurly p6StringSpecial2 hi def link p6EscCloseCurly p6StringSpecial2 hi def link p6EscCloseBracket p6StringSpecial2 hi def link p6EscCloseAngle p6StringSpecial2 hi def link p6EscCloseFrench p6StringSpecial2 hi def link p6EscBackSlash p6StringSpecial2 hi def link p6RxEscape p6StringSpecial2 hi def link p6RxCapture p6StringSpecial2 hi def link p6RxAlternation p6StringSpecial2 hi def link p6RxP5 p6StringSpecial2 hi def link p6RxP5ReadRef p6StringSpecial2 hi def link p6RxP5Oct p6StringSpecial2 hi def link p6RxP5Hex p6StringSpecial2 hi def link p6RxP5EscMeta p6StringSpecial2 hi def link p6RxP5Meta p6StringSpecial2 hi def link p6RxP5Escape p6StringSpecial2 hi def link p6RxP5CodePoint p6StringSpecial2 hi def link p6RxP5WriteRef p6StringSpecial2 hi def link p6RxP5Prop p6StringSpecial2 hi def link p6Property Tag hi def link p6Attention Todo hi def link p6Type Type hi def link p6Error Error hi def link p6BlockLabel Label hi def link p6Float Float hi def link p6Normal Normal hi def link p6Package Normal hi def link p6PackageScope Normal hi def link p6Number Number hi def link p6VersionNum Number hi def link p6String String hi def link p6Repeat Repeat hi def link p6Keyword Keyword hi def link p6Pragma Keyword hi def link p6Module Keyword hi def link p6DeclareRoutine Keyword hi def link p6VarStorage Special hi def link p6FlowControl Special hi def link p6NumberBase Special hi def link p6Twigil Special hi def link p6StringSpecial2 Special hi def link p6VersionDot Special hi def link p6Comment Comment hi def link p6Include Include hi def link p6Shebang PreProc hi def link p6ClosureTrait PreProc hi def link p6Routine Function hi def link p6Operator Operator hi def link p6Version Operator hi def link p6Context Operator hi def link p6Quote Delimiter hi def link p6TypeConstraint PreCondit hi def link p6Exception Exception hi def link p6Placeholder Identifier hi def link p6Variable Identifier hi def link p6VarSlash Identifier hi def link p6VarNum Identifier hi def link p6VarExclam Identifier hi def link p6VarMatch Identifier hi def link p6VarName Identifier hi def link p6MatchVar Identifier hi def link p6RxP5ReadRefId Identifier hi def link p6RxP5ModDef Identifier hi def link p6RxP5ModName Identifier hi def link p6Conditional Conditional hi def link p6StringSpecial SpecialChar hi def link p6PodAbbr p6Pod hi def link p6PodAbbrEOF p6Pod hi def link p6PodAbbrNoCode p6Pod hi def link p6PodAbbrCode p6PodCode hi def link p6PodPara p6Pod hi def link p6PodParaEOF p6Pod hi def link p6PodParaNoCode p6Pod hi def link p6PodParaCode p6PodCode hi def link p6PodDelim p6Pod hi def link p6PodDelimEOF p6Pod hi def link p6PodDelimNoCode p6Pod hi def link p6PodDelimCode p6PodCode hi def link p6PodImplicitCode p6PodCode hi def link p6PodExtraConfig p6PodPrefix hi def link p6PodVerticalBar p6PodFormatCode hi def link p6PodColon p6PodFormatCode hi def link p6PodSemicolon p6PodFormatCode hi def link p6PodComma p6PodFormatCode hi def link p6PodFormatOne p6PodFormat hi def link p6PodFormatTwo p6PodFormat hi def link p6PodFormatThree p6PodFormat hi def link p6PodFormatFrench p6PodFormat hi def link p6PodType Type hi def link p6PodConfigOption String hi def link p6PodCode PreProc hi def link p6Pod Comment hi def link p6PodComment Comment hi def link p6PodAutoQuote Operator hi def link p6PodConfigOperator Operator hi def link p6PodPrefix Statement hi def link p6PodName Identifier hi def link p6PodFormatCode SpecialChar hi def link p6PodFormat SpecialComment " Syncing to speed up processing "syn sync match p6SyncPod groupthere p6PodAbbrRegion "^=\K\k*\>" "syn sync match p6SyncPod groupthere p6PodDirectRegion "^=\%(config\|use\|encoding\)\>" "syn sync match p6SyncPod groupthere p6PodParaRegion "^=for\>" "syn sync match p6SyncPod groupthere p6PodDelimRegion "^=begin\>" "syn sync match p6SyncPod groupthere p6PodDelimEndRegion "^=end\>" " Let's just sync whole file, the other methods aren't reliable (or I don't " know how to use them reliably) syn sync fromstart setlocal foldmethod=syntax let b:current_syntax = "perl6" let &cpo = s:keepcpo unlet s:keepcpo " vim:ts=8:sts=4:sw=4:expandtab:ft=vim
SILENT KILLER Tool