/
usr
/
share
/
vim
/
vim74
/
syntax
/
/usr/share/vim/vim74/syntax
mkdir
upload
Name
Size
Mode
Actions
2html.vim
69056
0644
edit
dl
rm
a2ps.vim
2414
0644
edit
dl
rm
a65.vim
6779
0644
edit
dl
rm
aap.vim
5697
0644
edit
dl
rm
abap.vim
9462
0644
edit
dl
rm
abaqus.vim
1481
0644
edit
dl
rm
abc.vim
2225
0644
edit
dl
rm
abel.vim
5444
0644
edit
dl
rm
acedb.vim
5237
0644
edit
dl
rm
ada.vim
13050
0644
edit
dl
rm
aflex.vim
4823
0644
edit
dl
rm
ahdl.vim
3158
0644
edit
dl
rm
alsaconf.vim
1534
0644
edit
dl
rm
amiga.vim
3354
0644
edit
dl
rm
aml.vim
24502
0644
edit
dl
rm
ampl.vim
4293
0644
edit
dl
rm
ant.vim
5816
0644
edit
dl
rm
antlr.vim
2195
0644
edit
dl
rm
apache.vim
15138
0644
edit
dl
rm
apachestyle.vim
1738
0644
edit
dl
rm
aptconf.vim
19587
0644
edit
dl
rm
arch.vim
1137
0644
edit
dl
rm
art.vim
1297
0644
edit
dl
rm
asciidoc.vim
10858
0644
edit
dl
rm
asm.vim
4426
0644
edit
dl
rm
asm68k.vim
14642
0644
edit
dl
rm
asmh8300.vim
2477
0644
edit
dl
rm
asn.vim
2937
0644
edit
dl
rm
aspperl.vim
1016
0644
edit
dl
rm
aspvbs.vim
9477
0644
edit
dl
rm
asterisk.vim
5585
0644
edit
dl
rm
asteriskvm.vim
2620
0644
edit
dl
rm
atlas.vim
2968
0644
edit
dl
rm
autohotkey.vim
9988
0644
edit
dl
rm
autoit.vim
48014
0644
edit
dl
rm
automake.vim
4354
0644
edit
dl
rm
ave.vim
2267
0644
edit
dl
rm
awk.vim
7721
0644
edit
dl
rm
ayacc.vim
2954
0644
edit
dl
rm
b.vim
5215
0644
edit
dl
rm
baan.vim
73998
0644
edit
dl
rm
basic.vim
8508
0644
edit
dl
rm
bc.vim
2181
0644
edit
dl
rm
bdf.vim
3829
0644
edit
dl
rm
bib.vim
3851
0644
edit
dl
rm
bindzone.vim
5210
0644
edit
dl
rm
blank.vim
1205
0644
edit
dl
rm
bst.vim
3385
0644
edit
dl
rm
btm.vim
9631
0644
edit
dl
rm
bzr.vim
1955
0644
edit
dl
rm
c.vim
24831
0644
edit
dl
rm
cabal.vim
4697
0644
edit
dl
rm
calendar.vim
5030
0644
edit
dl
rm
catalog.vim
921
0644
edit
dl
rm
cdl.vim
3345
0644
edit
dl
rm
cdrdaoconf.vim
3635
0644
edit
dl
rm
cdrtoc.vim
22744
0644
edit
dl
rm
cf.vim
29595
0644
edit
dl
rm
cfg.vim
1753
0644
edit
dl
rm
ch.vim
1290
0644
edit
dl
rm
chaiscript.vim
2887
0644
edit
dl
rm
change.vim
1314
0644
edit
dl
rm
changelog.vim
2860
0644
edit
dl
rm
chaskell.vim
396
0644
edit
dl
rm
cheetah.vim
2135
0644
edit
dl
rm
chill.vim
8277
0644
edit
dl
rm
chordpro.vim
2521
0644
edit
dl
rm
cl.vim
4281
0644
edit
dl
rm
clean.vim
3362
0644
edit
dl
rm
clipper.vim
5961
0644
edit
dl
rm
clojure.vim
23371
0644
edit
dl
rm
cmake.vim
4457
0644
edit
dl
rm
cmusrc.vim
12913
0644
edit
dl
rm
cobol.vim
10310
0644
edit
dl
rm
coco.vim
1290
0644
edit
dl
rm
colortest.vim
3201
0644
edit
dl
rm
conaryrecipe.vim
8036
0644
edit
dl
rm
conf.vim
799
0644
edit
dl
rm
config.vim
1847
0644
edit
dl
rm
context.vim
4183
0644
edit
dl
rm
cpp.vim
2642
0644
edit
dl
rm
crm.vim
1185
0644
edit
dl
rm
crontab.vim
2566
0644
edit
dl
rm
cs.vim
6090
0644
edit
dl
rm
csc.vim
8789
0644
edit
dl
rm
csdl.vim
23755
0644
edit
dl
rm
csh.vim
7001
0644
edit
dl
rm
csp.vim
7501
0644
edit
dl
rm
css.vim
23639
0644
edit
dl
rm
cterm.vim
6740
0644
edit
dl
rm
ctrlh.vim
688
0644
edit
dl
rm
cucumber.vim
31887
0644
edit
dl
rm
cuda.vim
2839
0644
edit
dl
rm
cupl.vim
4230
0644
edit
dl
rm
cuplsim.vim
2379
0644
edit
dl
rm
cvs.vim
1304
0644
edit
dl
rm
cvsrc.vim
1242
0644
edit
dl
rm
cweb.vim
3368
0644
edit
dl
rm
cynlib.vim
3014
0644
edit
dl
rm
cynpp.vim
1784
0644
edit
dl
rm
d.vim
28018
0644
edit
dl
rm
datascript.vim
3474
0644
edit
dl
rm
dcd.vim
2198
0644
edit
dl
rm
dcl.vim
6625
0644
edit
dl
rm
debchangelog.vim
2530
0644
edit
dl
rm
debcontrol.vim
7242
0644
edit
dl
rm
debsources.vim
1348
0644
edit
dl
rm
def.vim
1495
0644
edit
dl
rm
denyhosts.vim
7353
0644
edit
dl
rm
desc.vim
3494
0644
edit
dl
rm
desktop.vim
4446
0644
edit
dl
rm
dictconf.vim
3106
0644
edit
dl
rm
dictdconf.vim
6453
0644
edit
dl
rm
diff.vim
16891
0644
edit
dl
rm
dircolors.vim
42054
0644
edit
dl
rm
dirpager.vim
1787
0644
edit
dl
rm
diva.vim
5071
0644
edit
dl
rm
django.vim
4305
0644
edit
dl
rm
dns.vim
132
0644
edit
dl
rm
dnsmasq.vim
9188
0644
edit
dl
rm
docbk.vim
10771
0644
edit
dl
rm
docbksgml.vim
193
0644
edit
dl
rm
docbkxml.vim
191
0644
edit
dl
rm
dosbatch.vim
6617
0644
edit
dl
rm
dosini.vim
1548
0644
edit
dl
rm
dot.vim
3395
0644
edit
dl
rm
doxygen.vim
36046
0644
edit
dl
rm
dracula.vim
3071
0644
edit
dl
rm
dsl.vim
1312
0644
edit
dl
rm
dtd.vim
5233
0644
edit
dl
rm
dtml.vim
17073
0644
edit
dl
rm
dtrace.vim
6488
0644
edit
dl
rm
dts.vim
1124
0644
edit
dl
rm
dylan.vim
3806
0644
edit
dl
rm
dylanintr.vim
1487
0644
edit
dl
rm
dylanlid.vim
1086
0644
edit
dl
rm
ecd.vim
1559
0644
edit
dl
rm
edif.vim
1648
0644
edit
dl
rm
eiffel.vim
7234
0644
edit
dl
rm
elf.vim
2716
0644
edit
dl
rm
elinks.vim
10482
0644
edit
dl
rm
elmfilt.vim
3264
0644
edit
dl
rm
erlang.vim
10887
0644
edit
dl
rm
eruby.vim
2893
0644
edit
dl
rm
esmtprc.vim
1033
0644
edit
dl
rm
esqlc.vim
2558
0644
edit
dl
rm
esterel.vim
3352
0644
edit
dl
rm
eterm.vim
19160
0644
edit
dl
rm
eviews.vim
5415
0644
edit
dl
rm
exim.vim
18270
0644
edit
dl
rm
expect.vim
4114
0644
edit
dl
rm
exports.vim
2134
0644
edit
dl
rm
falcon.vim
11957
0644
edit
dl
rm
fan.vim
5445
0644
edit
dl
rm
fasm.vim
8748
0644
edit
dl
rm
fdcc.vim
5961
0644
edit
dl
rm
fetchmail.vim
3296
0644
edit
dl
rm
fgl.vim
7663
0644
edit
dl
rm
flexwiki.vim
5468
0644
edit
dl
rm
focexec.vim
3910
0644
edit
dl
rm
form.vim
6813
0644
edit
dl
rm
forth.vim
13518
0644
edit
dl
rm
fortran.vim
26545
0644
edit
dl
rm
foxpro.vim
33150
0644
edit
dl
rm
framescript.vim
11667
0644
edit
dl
rm
freebasic.vim
10512
0644
edit
dl
rm
fstab.vim
15552
0644
edit
dl
rm
fvwm.vim
25026
0644
edit
dl
rm
fvwm2m4.vim
828
0644
edit
dl
rm
gdb.vim
4746
0644
edit
dl
rm
gdmo.vim
3678
0644
edit
dl
rm
gedcom.vim
2673
0644
edit
dl
rm
git.vim
4156
0644
edit
dl
rm
gitcommit.vim
4836
0644
edit
dl
rm
gitconfig.vim
1616
0644
edit
dl
rm
gitolite.vim
3586
0644
edit
dl
rm
gitrebase.vim
1727
0644
edit
dl
rm
gitsendemail.vim
437
0644
edit
dl
rm
gkrellmrc.vim
4342
0644
edit
dl
rm
gnash.vim
3559
0644
edit
dl
rm
gnuplot.vim
9636
0644
edit
dl
rm
gp.vim
3138
0644
edit
dl
rm
gpg.vim
5579
0644
edit
dl
rm
gprof.vim
2117
0644
edit
dl
rm
grads.vim
2108
0644
edit
dl
rm
gretl.vim
4144
0644
edit
dl
rm
groff.vim
292
0644
edit
dl
rm
groovy.vim
22880
0644
edit
dl
rm
group.vim
1707
0644
edit
dl
rm
grub.vim
3870
0644
edit
dl
rm
gsp.vim
2260
0644
edit
dl
rm
gtkrc.vim
9476
0644
edit
dl
rm
haml.vim
7024
0644
edit
dl
rm
hamster.vim
14233
0644
edit
dl
rm
haskell.vim
8733
0644
edit
dl
rm
haste.vim
5089
0644
edit
dl
rm
hastepreproc.vim
1633
0644
edit
dl
rm
hb.vim
3549
0644
edit
dl
rm
help.vim
7948
0644
edit
dl
rm
hercules.vim
6150
0644
edit
dl
rm
hex.vim
1692
0644
edit
dl
rm
hgcommit.vim
1114
0644
edit
dl
rm
hitest.vim
3685
0644
edit
dl
rm
hog.vim
18161
0644
edit
dl
rm
hostconf.vim
3858
0644
edit
dl
rm
hostsaccess.vim
607
0644
edit
dl
rm
html.vim
15839
0644
edit
dl
rm
htmlcheetah.vim
672
0644
edit
dl
rm
htmldjango.vim
1182
0644
edit
dl
rm
htmlm4.vim
874
0644
edit
dl
rm
htmlos.vim
8743
0644
edit
dl
rm
ia64.vim
10938
0644
edit
dl
rm
ibasic.vim
7036
0644
edit
dl
rm
icemenu.vim
838
0644
edit
dl
rm
icon.vim
7294
0644
edit
dl
rm
idl.vim
19586
0644
edit
dl
rm
idlang.vim
13826
0644
edit
dl
rm
indent.vim
7151
0644
edit
dl
rm
inform.vim
19766
0644
edit
dl
rm
initex.vim
19211
0644
edit
dl
rm
initng.vim
3398
0644
edit
dl
rm
inittab.vim
2829
0644
edit
dl
rm
ipfilter.vim
1717
0644
edit
dl
rm
ishd.vim
27423
0644
edit
dl
rm
iss.vim
5361
0644
edit
dl
rm
ist.vim
2446
0644
edit
dl
rm
jal.vim
9202
0644
edit
dl
rm
jam.vim
27113
0644
edit
dl
rm
jargon.vim
1006
0644
edit
dl
rm
java.vim
17520
0644
edit
dl
rm
javacc.vim
2711
0644
edit
dl
rm
javascript.vim
5470
0644
edit
dl
rm
jess.vim
6682
0644
edit
dl
rm
jgraph.vim
1616
0644
edit
dl
rm
jovial.vim
4107
0644
edit
dl
rm
jproperties.vim
5892
0644
edit
dl
rm
jsp.vim
3122
0644
edit
dl
rm
kconfig.vim
36137
0644
edit
dl
rm
kix.vim
6579
0644
edit
dl
rm
kscript.vim
2367
0644
edit
dl
rm
kwt.vim
2918
0644
edit
dl
rm
lace.vim
4418
0644
edit
dl
rm
latte.vim
3989
0644
edit
dl
rm
ld.vim
2890
0644
edit
dl
rm
ldapconf.vim
13290
0644
edit
dl
rm
ldif.vim
1216
0644
edit
dl
rm
lex.vim
6770
0644
edit
dl
rm
lftp.vim
7459
0644
edit
dl
rm
lhaskell.vim
4997
0644
edit
dl
rm
libao.vim
624
0644
edit
dl
rm
lifelines.vim
6911
0644
edit
dl
rm
lilo.vim
10672
0644
edit
dl
rm
limits.vim
1305
0644
edit
dl
rm
liquid.vim
6184
0644
edit
dl
rm
lisp.vim
36416
0644
edit
dl
rm
lite.vim
5197
0644
edit
dl
rm
litestep.vim
6664
0644
edit
dl
rm
loginaccess.vim
4185
0644
edit
dl
rm
logindefs.vim
7525
0644
edit
dl
rm
logtalk.vim
16291
0644
edit
dl
rm
lotos.vim
2760
0644
edit
dl
rm
lout.vim
4797
0644
edit
dl
rm
lpc.vim
23387
0644
edit
dl
rm
lprolog.vim
4352
0644
edit
dl
rm
lscript.vim
12486
0644
edit
dl
rm
lsl.vim
15800
0644
edit
dl
rm
lss.vim
5262
0644
edit
dl
rm
lua.vim
14405
0644
edit
dl
rm
lynx.vim
6579
0644
edit
dl
rm
m4.vim
3063
0644
edit
dl
rm
mail.vim
6061
0644
edit
dl
rm
mailaliases.vim
2755
0644
edit
dl
rm
mailcap.vim
1135
0644
edit
dl
rm
make.vim
6493
0644
edit
dl
rm
mallard.vim
1726
0644
edit
dl
rm
man.vim
2039
0644
edit
dl
rm
manconf.vim
4332
0644
edit
dl
rm
manual.vim
803
0644
edit
dl
rm
maple.vim
28625
0644
edit
dl
rm
markdown.vim
7280
0644
edit
dl
rm
masm.vim
16075
0644
edit
dl
rm
mason.vim
3470
0644
edit
dl
rm
master.vim
1435
0644
edit
dl
rm
matlab.vim
4329
0644
edit
dl
rm
maxima.vim
19163
0644
edit
dl
rm
mel.vim
3741
0644
edit
dl
rm
messages.vim
2549
0644
edit
dl
rm
mf.vim
8244
0644
edit
dl
rm
mgl.vim
3958
0644
edit
dl
rm
mgp.vim
2399
0644
edit
dl
rm
mib.vim
2696
0644
edit
dl
rm
mma.vim
11967
0644
edit
dl
rm
mmix.vim
5247
0644
edit
dl
rm
mmp.vim
1666
0644
edit
dl
rm
modconf.vim
1407
0644
edit
dl
rm
model.vim
1469
0644
edit
dl
rm
modsim3.vim
3956
0644
edit
dl
rm
modula2.vim
3620
0644
edit
dl
rm
modula3.vim
2426
0644
edit
dl
rm
monk.vim
10693
0644
edit
dl
rm
moo.vim
9251
0644
edit
dl
rm
mp.vim
5757
0644
edit
dl
rm
mplayerconf.vim
4391
0644
edit
dl
rm
mrxvtrc.vim
9603
0644
edit
dl
rm
msidl.vim
3830
0644
edit
dl
rm
msmessages.vim
6413
0644
edit
dl
rm
msql.vim
2800
0644
edit
dl
rm
mupad.vim
15775
0644
edit
dl
rm
mush.vim
13466
0644
edit
dl
rm
muttrc.vim
81075
0644
edit
dl
rm
mysql.vim
17874
0644
edit
dl
rm
named.vim
10417
0644
edit
dl
rm
nanorc.vim
10608
0644
edit
dl
rm
nasm.vim
25582
0644
edit
dl
rm
nastran.vim
8733
0644
edit
dl
rm
natural.vim
7283
0644
edit
dl
rm
ncf.vim
13666
0644
edit
dl
rm
netrc.vim
1922
0644
edit
dl
rm
netrw.vim
5845
0644
edit
dl
rm
ninja.vim
2555
0644
edit
dl
rm
nosyntax.vim
755
0644
edit
dl
rm
nqc.vim
14384
0644
edit
dl
rm
nroff.vim
8040
0644
edit
dl
rm
nsis.vim
9876
0644
edit
dl
rm
obj.vim
3161
0644
edit
dl
rm
objc.vim
30435
0644
edit
dl
rm
objcpp.vim
786
0644
edit
dl
rm
ocaml.vim
13826
0644
edit
dl
rm
occam.vim
4472
0644
edit
dl
rm
omnimark.vim
6854
0644
edit
dl
rm
openroad.vim
14344
0644
edit
dl
rm
opl.vim
4524
0644
edit
dl
rm
ora.vim
27463
0644
edit
dl
rm
pamconf.vim
5534
0644
edit
dl
rm
papp.vim
4126
0644
edit
dl
rm
pascal.vim
15325
0644
edit
dl
rm
passwd.vim
2431
0644
edit
dl
rm
pcap.vim
1969
0644
edit
dl
rm
pccts.vim
4545
0644
edit
dl
rm
pdf.vim
3539
0644
edit
dl
rm
perl.vim
36570
0644
edit
dl
rm
perl6.vim
74415
0644
edit
dl
rm
pf.vim
2773
0644
edit
dl
rm
pfmain.vim
82833
0644
edit
dl
rm
php.vim
80509
0644
edit
dl
rm
phtml.vim
151
0644
edit
dl
rm
pic.vim
3714
0644
edit
dl
rm
pike.vim
6703
0644
edit
dl
rm
pilrc.vim
5505
0644
edit
dl
rm
pine.vim
15889
0644
edit
dl
rm
pinfo.vim
5284
0644
edit
dl
rm
plaintex.vim
10289
0644
edit
dl
rm
pli.vim
13515
0644
edit
dl
rm
plm.vim
5703
0644
edit
dl
rm
plp.vim
1466
0644
edit
dl
rm
plsql.vim
13230
0644
edit
dl
rm
po.vim
6363
0644
edit
dl
rm
pod.vim
7674
0644
edit
dl
rm
postscr.vim
46541
0644
edit
dl
rm
pov.vim
9352
0644
edit
dl
rm
povini.vim
3782
0644
edit
dl
rm
ppd.vim
1259
0644
edit
dl
rm
ppwiz.vim
3179
0644
edit
dl
rm
prescribe.vim
2787
0644
edit
dl
rm
privoxy.vim
3579
0644
edit
dl
rm
procmail.vim
2409
0644
edit
dl
rm
progress.vim
32134
0644
edit
dl
rm
prolog.vim
4554
0644
edit
dl
rm
promela.vim
1823
0644
edit
dl
rm
proto.vim
2924
0644
edit
dl
rm
protocols.vim
1417
0644
edit
dl
rm
psf.vim
4625
0644
edit
dl
rm
ptcap.vim
4459
0644
edit
dl
rm
purifylog.vim
3628
0644
edit
dl
rm
pyrex.vim
2045
0644
edit
dl
rm
python.vim
11886
0644
edit
dl
rm
qf.vim
596
0644
edit
dl
rm
quake.vim
8538
0644
edit
dl
rm
r.vim
7628
0644
edit
dl
rm
racc.vim
5607
0644
edit
dl
rm
radiance.vim
7593
0644
edit
dl
rm
ratpoison.vim
17601
0644
edit
dl
rm
rc.vim
10435
0644
edit
dl
rm
rcs.vim
2525
0644
edit
dl
rm
rcslog.vim
970
0644
edit
dl
rm
readline.vim
16630
0644
edit
dl
rm
README.txt
1403
0644
edit
dl
rm
rebol.vim
7549
0644
edit
dl
rm
redif.vim
87970
0644
edit
dl
rm
registry.vim
3565
0644
edit
dl
rm
remind.vim
2777
0644
edit
dl
rm
resolv.vim
3171
0644
edit
dl
rm
reva.vim
7764
0644
edit
dl
rm
rexx.vim
15598
0644
edit
dl
rm
rhelp.vim
10077
0644
edit
dl
rm
rib.vim
2438
0644
edit
dl
rm
rnc.vim
2251
0644
edit
dl
rm
rng.vim
817
0644
edit
dl
rm
rnoweb.vim
2058
0644
edit
dl
rm
robots.vim
1840
0644
edit
dl
rm
rpcgen.vim
2159
0644
edit
dl
rm
rpl.vim
25985
0644
edit
dl
rm
rst.vim
8255
0644
edit
dl
rm
rtf.vim
2740
0644
edit
dl
rm
ruby.vim
28422
0644
edit
dl
rm
samba.vim
6524
0644
edit
dl
rm
sas.vim
12019
0644
edit
dl
rm
sass.vim
5735
0644
edit
dl
rm
sather.vim
3828
0644
edit
dl
rm
scheme.vim
17667
0644
edit
dl
rm
scilab.vim
3522
0644
edit
dl
rm
screen.vim
8521
0644
edit
dl
rm
scss.vim
409
0644
edit
dl
rm
sd.vim
2552
0644
edit
dl
rm
sdc.vim
1391
0644
edit
dl
rm
sdl.vim
7030
0644
edit
dl
rm
sed.vim
5352
0644
edit
dl
rm
sendpr.vim
1000
0644
edit
dl
rm
sensors.vim
1501
0644
edit
dl
rm
services.vim
1811
0644
edit
dl
rm
setserial.vim
5217
0644
edit
dl
rm
sgml.vim
8961
0644
edit
dl
rm
sgmldecl.vim
2473
0644
edit
dl
rm
sgmllnx.vim
2233
0644
edit
dl
rm
sh.vim
39061
0644
edit
dl
rm
sicad.vim
18941
0644
edit
dl
rm
sieve.vim
1659
0644
edit
dl
rm
simula.vim
3681
0644
edit
dl
rm
sinda.vim
4101
0644
edit
dl
rm
sindacmp.vim
1682
0644
edit
dl
rm
sindaout.vim
2420
0644
edit
dl
rm
sisu.vim
20388
0644
edit
dl
rm
skill.vim
26116
0644
edit
dl
rm
sl.vim
4420
0644
edit
dl
rm
slang.vim
3638
0644
edit
dl
rm
slice.vim
3300
0644
edit
dl
rm
slpconf.vim
11779
0644
edit
dl
rm
slpreg.vim
5334
0644
edit
dl
rm
slpspi.vim
1169
0644
edit
dl
rm
slrnrc.vim
13158
0644
edit
dl
rm
slrnsc.vim
3531
0644
edit
dl
rm
sm.vim
3285
0644
edit
dl
rm
smarty.vim
3091
0644
edit
dl
rm
smcl.vim
12033
0644
edit
dl
rm
smil.vim
5980
0644
edit
dl
rm
smith.vim
1195
0644
edit
dl
rm
sml.vim
9639
0644
edit
dl
rm
snnsnet.vim
2693
0644
edit
dl
rm
snnspat.vim
2430
0644
edit
dl
rm
snnsres.vim
2144
0644
edit
dl
rm
snobol4.vim
5609
0644
edit
dl
rm
spec.vim
12685
0644
edit
dl
rm
specman.vim
7648
0644
edit
dl
rm
spice.vim
2636
0644
edit
dl
rm
splint.vim
16135
0644
edit
dl
rm
spup.vim
14286
0644
edit
dl
rm
spyce.vim
4610
0644
edit
dl
rm
sql.vim
1217
0644
edit
dl
rm
sqlanywhere.vim
42026
0644
edit
dl
rm
sqlforms.vim
7136
0644
edit
dl
rm
sqlhana.vim
11124
0644
edit
dl
rm
sqlinformix.vim
6284
0644
edit
dl
rm
sqlj.vim
3216
0644
edit
dl
rm
sqloracle.vim
2970
0644
edit
dl
rm
sqr.vim
14193
0644
edit
dl
rm
squid.vim
7318
0644
edit
dl
rm
sshconfig.vim
8902
0644
edit
dl
rm
sshdconfig.vim
8655
0644
edit
dl
rm
st.vim
3133
0644
edit
dl
rm
stata.vim
27046
0644
edit
dl
rm
stp.vim
5789
0644
edit
dl
rm
strace.vim
2199
0644
edit
dl
rm
sudoers.vim
22041
0644
edit
dl
rm
svg.vim
436
0644
edit
dl
rm
svn.vim
1678
0644
edit
dl
rm
syncolor.vim
4093
0644
edit
dl
rm
synload.vim
1901
0644
edit
dl
rm
syntax.vim
1228
0644
edit
dl
rm
sysctl.vim
1141
0644
edit
dl
rm
tads.vim
7180
0644
edit
dl
rm
tags.vim
1575
0644
edit
dl
rm
tak.vim
3348
0644
edit
dl
rm
takcmp.vim
1991
0644
edit
dl
rm
takout.vim
2451
0644
edit
dl
rm
tar.vim
373
0644
edit
dl
rm
taskdata.vim
1303
0644
edit
dl
rm
taskedit.vim
1226
0644
edit
dl
rm
tasm.vim
6051
0644
edit
dl
rm
tcl.vim
17414
0644
edit
dl
rm
tcsh.vim
13269
0644
edit
dl
rm
terminfo.vim
4791
0644
edit
dl
rm
tex.vim
62762
0644
edit
dl
rm
texinfo.vim
25856
0644
edit
dl
rm
texmf.vim
2469
0644
edit
dl
rm
tf.vim
7237
0644
edit
dl
rm
tidy.vim
6530
0644
edit
dl
rm
tilde.vim
1538
0644
edit
dl
rm
tli.vim
2050
0644
edit
dl
rm
tpp.vim
3925
0644
edit
dl
rm
trasys.vim
5464
0644
edit
dl
rm
treetop.vim
3656
0644
edit
dl
rm
trustees.vim
1537
0644
edit
dl
rm
tsalt.vim
8637
0644
edit
dl
rm
tsscl.vim
5492
0644
edit
dl
rm
tssgm.vim
3165
0644
edit
dl
rm
tssop.vim
2178
0644
edit
dl
rm
tt2.vim
7920
0644
edit
dl
rm
tt2html.vim
516
0644
edit
dl
rm
tt2js.vim
522
0644
edit
dl
rm
uc.vim
6925
0644
edit
dl
rm
udevconf.vim
1215
0644
edit
dl
rm
udevperm.vim
2397
0644
edit
dl
rm
udevrules.vim
6948
0644
edit
dl
rm
uil.vim
2999
0644
edit
dl
rm
updatedb.vim
1208
0644
edit
dl
rm
upstart.vim
3141
0644
edit
dl
rm
upstreamdat.vim
13828
0644
edit
dl
rm
upstreaminstalllog.vim
971
0644
edit
dl
rm
upstreamlog.vim
2532
0644
edit
dl
rm
usserverlog.vim
3030
0644
edit
dl
rm
usw2kagtlog.vim
2184
0644
edit
dl
rm
valgrind.vim
3059
0644
edit
dl
rm
vb.vim
20622
0644
edit
dl
rm
vera.vim
19802
0644
edit
dl
rm
verilog.vim
5529
0644
edit
dl
rm
verilogams.vim
6556
0644
edit
dl
rm
vgrindefs.vim
1214
0644
edit
dl
rm
vhdl.vim
6752
0644
edit
dl
rm
vim.vim
64052
0644
edit
dl
rm
viminfo.vim
1124
0644
edit
dl
rm
virata.vim
11874
0644
edit
dl
rm
vmasm.vim
8891
0644
edit
dl
rm
voscm.vim
6975
0644
edit
dl
rm
vrml.vim
13217
0644
edit
dl
rm
vsejcl.vim
1393
0644
edit
dl
rm
wdiff.vim
1151
0644
edit
dl
rm
web.vim
1271
0644
edit
dl
rm
webmacro.vim
3471
0644
edit
dl
rm
wget.vim
3961
0644
edit
dl
rm
whitespace.vim
357
0644
edit
dl
rm
winbatch.vim
12548
0644
edit
dl
rm
wml.vim
6266
0644
edit
dl
rm
wsh.vim
1242
0644
edit
dl
rm
wsml.vim
5725
0644
edit
dl
rm
wvdial.vim
1093
0644
edit
dl
rm
xbl.vim
568
0644
edit
dl
rm
xdefaults.vim
6261
0644
edit
dl
rm
xf86conf.vim
14925
0644
edit
dl
rm
xhtml.vim
186
0644
edit
dl
rm
xinetd.vim
14196
0644
edit
dl
rm
xkb.vim
3463
0644
edit
dl
rm
xmath.vim
11107
0644
edit
dl
rm
xml.vim
8609
0644
edit
dl
rm
xmodmap.vim
46499
0644
edit
dl
rm
xpm.vim
4655
0644
edit
dl
rm
xpm2.vim
4987
0644
edit
dl
rm
xquery.vim
7191
0644
edit
dl
rm
xs.vim
219747
0644
edit
dl
rm
xsd.vim
2125
0644
edit
dl
rm
xslt.vim
2166
0644
edit
dl
rm
xxd.vim
1191
0644
edit
dl
rm
yacc.vim
5539
0644
edit
dl
rm
yaml.vim
8968
0644
edit
dl
rm
z8a.vim
3277
0644
edit
dl
rm
zimbu.vim
4801
0644
edit
dl
rm
zsh.vim
8923
0644
edit
dl
rm
Edit:
/usr/share/vim/vim74/syntax/perl6.vim
(74415B)
" 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 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 syntax clear elseif exists("b:current_syntax") finish endif 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. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet if version >= 508 || !exists("did_perl6_syntax_inits") if version < 508 let did_perl6_syntax_inits = 1 command -nargs=+ HiLink hi link <args> else command -nargs=+ HiLink hi def link <args> endif HiLink p6EscOctOld p6Error HiLink p6PackageTwigil p6Twigil HiLink p6StringAngle p6String HiLink p6StringFrench p6String HiLink p6StringAngles p6String HiLink p6StringSQ p6String HiLink p6StringDQ p6String HiLink p6StringQ p6String HiLink p6RxStringSQ p6String HiLink p6RxStringDQ p6String HiLink p6Substitution p6String HiLink p6Transliteration p6String HiLink p6StringAuto p6String HiLink p6StringP5Auto p6String HiLink p6Key p6String HiLink p6Match p6String HiLink p6RegexBlock p6String HiLink p6RxP5CharClass p6String HiLink p6RxP5QuoteMeta p6String HiLink p6RxCharClass p6String HiLink p6RxQuoteWords p6String HiLink p6ReduceOp p6Operator HiLink p6ReverseCrossOp p6Operator HiLink p6HyperOp p6Operator HiLink p6QuoteQ p6Operator HiLink p6RxRange p6StringSpecial HiLink p6RxAnchor p6StringSpecial HiLink p6RxP5Anchor p6StringSpecial HiLink p6CodePoint p6StringSpecial HiLink p6RxMeta p6StringSpecial HiLink p6RxP5Range p6StringSpecial HiLink p6RxP5CPId p6StringSpecial HiLink p6RxP5Posix p6StringSpecial HiLink p6RxP5Mod p6StringSpecial HiLink p6RxP5HexSeq p6StringSpecial HiLink p6RxP5OctSeq p6StringSpecial HiLink p6RxP5WriteRefId p6StringSpecial HiLink p6HexSequence p6StringSpecial HiLink p6OctSequence p6StringSpecial HiLink p6RxP5Named p6StringSpecial HiLink p6RxP5PropId p6StringSpecial HiLink p6RxP5Quantifier p6StringSpecial HiLink p6RxP5CountId p6StringSpecial HiLink p6RxP5Verb p6StringSpecial HiLink p6Escape p6StringSpecial2 HiLink p6EscNull p6StringSpecial2 HiLink p6EscHash p6StringSpecial2 HiLink p6EscQQ p6StringSpecial2 HiLink p6EscQuote p6StringSpecial2 HiLink p6EscDoubleQuote p6StringSpecial2 HiLink p6EscBackTick p6StringSpecial2 HiLink p6EscForwardSlash p6StringSpecial2 HiLink p6EscVerticalBar p6StringSpecial2 HiLink p6EscExclamation p6StringSpecial2 HiLink p6EscDollar p6StringSpecial2 HiLink p6EscOpenCurly p6StringSpecial2 HiLink p6EscCloseCurly p6StringSpecial2 HiLink p6EscCloseBracket p6StringSpecial2 HiLink p6EscCloseAngle p6StringSpecial2 HiLink p6EscCloseFrench p6StringSpecial2 HiLink p6EscBackSlash p6StringSpecial2 HiLink p6RxEscape p6StringSpecial2 HiLink p6RxCapture p6StringSpecial2 HiLink p6RxAlternation p6StringSpecial2 HiLink p6RxP5 p6StringSpecial2 HiLink p6RxP5ReadRef p6StringSpecial2 HiLink p6RxP5Oct p6StringSpecial2 HiLink p6RxP5Hex p6StringSpecial2 HiLink p6RxP5EscMeta p6StringSpecial2 HiLink p6RxP5Meta p6StringSpecial2 HiLink p6RxP5Escape p6StringSpecial2 HiLink p6RxP5CodePoint p6StringSpecial2 HiLink p6RxP5WriteRef p6StringSpecial2 HiLink p6RxP5Prop p6StringSpecial2 HiLink p6Property Tag HiLink p6Attention Todo HiLink p6Type Type HiLink p6Error Error HiLink p6BlockLabel Label HiLink p6Float Float HiLink p6Normal Normal HiLink p6Package Normal HiLink p6PackageScope Normal HiLink p6Number Number HiLink p6VersionNum Number HiLink p6String String HiLink p6Repeat Repeat HiLink p6Keyword Keyword HiLink p6Pragma Keyword HiLink p6Module Keyword HiLink p6DeclareRoutine Keyword HiLink p6VarStorage Special HiLink p6FlowControl Special HiLink p6NumberBase Special HiLink p6Twigil Special HiLink p6StringSpecial2 Special HiLink p6VersionDot Special HiLink p6Comment Comment HiLink p6Include Include HiLink p6Shebang PreProc HiLink p6ClosureTrait PreProc HiLink p6Routine Function HiLink p6Operator Operator HiLink p6Version Operator HiLink p6Context Operator HiLink p6Quote Delimiter HiLink p6TypeConstraint PreCondit HiLink p6Exception Exception HiLink p6Placeholder Identifier HiLink p6Variable Identifier HiLink p6VarSlash Identifier HiLink p6VarNum Identifier HiLink p6VarExclam Identifier HiLink p6VarMatch Identifier HiLink p6VarName Identifier HiLink p6MatchVar Identifier HiLink p6RxP5ReadRefId Identifier HiLink p6RxP5ModDef Identifier HiLink p6RxP5ModName Identifier HiLink p6Conditional Conditional HiLink p6StringSpecial SpecialChar HiLink p6PodAbbr p6Pod HiLink p6PodAbbrEOF p6Pod HiLink p6PodAbbrNoCode p6Pod HiLink p6PodAbbrCode p6PodCode HiLink p6PodPara p6Pod HiLink p6PodParaEOF p6Pod HiLink p6PodParaNoCode p6Pod HiLink p6PodParaCode p6PodCode HiLink p6PodDelim p6Pod HiLink p6PodDelimEOF p6Pod HiLink p6PodDelimNoCode p6Pod HiLink p6PodDelimCode p6PodCode HiLink p6PodImplicitCode p6PodCode HiLink p6PodExtraConfig p6PodPrefix HiLink p6PodVerticalBar p6PodFormatCode HiLink p6PodColon p6PodFormatCode HiLink p6PodSemicolon p6PodFormatCode HiLink p6PodComma p6PodFormatCode HiLink p6PodFormatOne p6PodFormat HiLink p6PodFormatTwo p6PodFormat HiLink p6PodFormatThree p6PodFormat HiLink p6PodFormatFrench p6PodFormat HiLink p6PodType Type HiLink p6PodConfigOption String HiLink p6PodCode PreProc HiLink p6Pod Comment HiLink p6PodComment Comment HiLink p6PodAutoQuote Operator HiLink p6PodConfigOperator Operator HiLink p6PodPrefix Statement HiLink p6PodName Identifier HiLink p6PodFormatCode SpecialChar HiLink p6PodFormat SpecialComment delcommand HiLink endif " 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
Save
cmd:
run